相邻数组元素地址之间的差异



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

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

我得到的输出就像

0046F7A0    0046F79C    1

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

是的,这是指针算术的结果。这也是arr + 1指向arr[1]的原因。仅当两个指针都指向同一数组中的元素时,指针算术才得到明确定义。如果两个这样的指针 PQ 指向数组位置 ij ,则P-Q = i-j

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

你是

对的,这与指针算术有关。减去两个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

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

相关内容

最新更新