假设我声明了一个整数数组:
int arr[3];
从概念上讲,内存中发生的事情是,在编译时,分配12个字节来存储3个连续的整数,对吗? (Here's an illustration)
根据插图,
的样本地址 arr[0]
是1000
,
arr[1]
是1004
,
arr[2]
是1008
。
我的问题是:
如果我输出arr[0]
和arr[1]
地址之间的差异:
std::cout << &arr[1] - &arr[0] << std::endl;
而非获取4
,
我惊讶地得到1
。
有人可以解释为什么会产生这个输出吗?
PS:在我的计算机上,int是4个字节。
答案 0 :(得分:0)
指针算术会自动将值除以基类型的大小,因此这一点都不奇怪,因为人们期望得到4 / 4
1
。转换为unsignd char *
以查看差异。
#include <iostream>
int
main(void)
{
int arr[2];
std::cout << &arr[1] - &arr[0] << std::endl;
std::cout << reinterpret_cast<unsigned char *>(&arr[1]) -
reinterpret_cast<unsigned char *>(&arr[0]) << std::endl;
return 0;
}