相邻数组元素地址的区别..?

时间:2015-01-01 07:40:36

标签: c++ arrays

我只是对以下代码的输出感到困惑:

int arr[] = {10,20,30};
cout<<&arr[1]<<"\t"<<&arr[0]<<"\t"<<&arr[1] - &arr[0];

我得到的输出就像

0046F7A0    0046F79C    1

我想知道为什么地址之间的差异给了1(我预期4)......? 它与指针减法有关吗??

3 个答案:

答案 0 :(得分:4)

是的,这是pointer arithmetic的结果。这与arr + 1指向arr[1]的原因相同。只有当两个指针指向同一个数组中的元素时,才能很好地定义指针算法。如果两个此类指针PQ指向数组位置ij,则指向P-Q = i-j

此外,如果您查看打印的实际地址的差异,它们符合您的期望 - 差异为4

答案 1 :(得分:0)

你是对的,这与指针算法有关。减去两个int指针可以得出它们在sizeof (int)单位中测量的差异。您可以通过指向char指针来获得普通字节的差异,因为char的大小保证为1。

uint arr[] = {10,20,30};
cout << &arr[1] << "\t" << &arr[0] << "\t" << (char*)&arr[1] - (char*)&arr[0];

输出:

0x23fe44        0x23fe40        4

答案 2 :(得分:-1)

0046F7A0 - 0046F79C实际上是4但是&arr[0]-&arr[1] = (0046F7A0 - 0046F79C)/sizeof(int= 4 bytes),因为减去两个指针可以得到它们之间的元素数量。