我正在寻找一种解决方案,以找出C ++中数组的长度。我发现的解决方案之一是
int arr[] = {1,2,3,4,5,6};
int size = *(&arr+1)-arr; //size is the length of the array
Run Code Online (Sandbox Code Playgroud)
我之间感到困惑&arr,arr因为两者都给出了数组的基地址。再次进行Google搜索,发现&arr + 1给出了不属于数组一部分的下一个内存块arr + 1的地址,其中给出了数组中下一个元素的地址。
我编写了以下代码来测试&arr和之间的区别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);
Run Code Online (Sandbox Code Playgroud)
在回答第一个printf是1在那里作为第二printf给出6。这是混淆了我的部分:由于这两种&arr与arr持有相同阵列的基址,为何结果不同?