我正在谷歌搜索一个解决方案来找出 C++ 中数组的长度。我发现的解决方案之一是这样的
int arr[] = {1,2,3,4,5,6};
int size = *(&arr+1)-arr; //size is the length of the array
我很困惑&arr
and arr
因为两者都给出了数组的基地址。再次Google了一下,发现&arr + 1
给出不属于数组的下一个内存块的地址,其中arr + 1
给出数组中下一个元素的地址。
我编写了以下代码来测试之间的区别&arr
and arr
:
int arr[] = {1,2,3,4,5,6};
printf("value of &arr + 1 - &arr = %d\n", &arr + 1 - &arr);
printf("value of *(&arr + 1) - arr = %d\n", *(&arr + 1) - arr);
第一个的答案printf
is 1
作为第二个printf
gives 6
。这是让我困惑的部分:因为&arr
and arr
保存同一个数组的基地址,为什么结果不同?