相邻数组元素的地址之间的差异..?
Difference between the address of adjacent array elements..?
我只是对以下代码的输出感到困惑:
int arr[] = {10,20,30};
cout<<&arr[1]<<"\t"<<&arr[0]<<"\t"<<&arr[1] - &arr[0];
我得到的输出是这样的
0046F7A0 0046F79C 1
我想知道为什么地址之间的差异给了 1(我期望是 4)...?
跟指针减法有关系吗?
是的,这是pointer arithmetic的结果。这与 arr + 1
指向 arr[1]
的原因相同。只有当两个指针都指向同一个数组中的元素时,指针算术才是明确定义的。如果两个这样的指针 P
和 Q
指向数组位置 i
和 j
,则 P-Q = i-j
.
此外,如果您查看打印的实际地址的差异,它们符合您的预期 - 差异为 4
。
你是对的,这和指针运算有关。减去两个 int
指针得到它们之间的差异,以 sizeof (int)
单位测量。您可以通过将指针转换为 char
指针来获得纯字节的差异,因为 char
s 保证大小为 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)
因为减去两个指针得到它们之间的元素数。
我只是对以下代码的输出感到困惑:
int arr[] = {10,20,30};
cout<<&arr[1]<<"\t"<<&arr[0]<<"\t"<<&arr[1] - &arr[0];
我得到的输出是这样的
0046F7A0 0046F79C 1
我想知道为什么地址之间的差异给了 1(我期望是 4)...? 跟指针减法有关系吗?
是的,这是pointer arithmetic的结果。这与 arr + 1
指向 arr[1]
的原因相同。只有当两个指针都指向同一个数组中的元素时,指针算术才是明确定义的。如果两个这样的指针 P
和 Q
指向数组位置 i
和 j
,则 P-Q = i-j
.
此外,如果您查看打印的实际地址的差异,它们符合您的预期 - 差异为 4
。
你是对的,这和指针运算有关。减去两个 int
指针得到它们之间的差异,以 sizeof (int)
单位测量。您可以通过将指针转换为 char
指针来获得纯字节的差异,因为 char
s 保证大小为 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)
因为减去两个指针得到它们之间的元素数。