gpt4 book ai didi

c++ - *(&arr + 1) - arr 如何给出数组大小

转载 作者:行者123 更新时间:2023-12-04 10:57:56 27 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





How does *(&arr + 1) - arr give the length in elements of array arr?

(3 个回答)



Why are the values different? C++ pointer

(2 个回答)


4 个月前关闭。



int arr[] = { 3, 5, 9, 2, 8, 10, 11 };      
int arrSize = *(&arr + 1) - arr;
std::cout << arrSize;
我不知道这是如何工作的。所以任何人都可以帮助我解决这个问题。

最佳答案

如果我们将数组与指针一起“绘制”,它将看起来像这样:

+--------+--------+-----+--------+-----+
| arr[0] | arr[1] | ... | arr[6] | ... |
+--------+--------+-----+--------+-----+
^ ^ ^
| | |
&arr[0] &arr[1] |
| |
&arr &arr + 1
表达式的类型 &arr&arr + 1int (*)[7] .如果我们取消引用这些指针中的任何一个,我们会得到类型 int[7] 的值。 ,并且与所有数组一样,它将衰减为指向其第一个元素的指针。
所以发生的事情是我们获取指向 &arr + 1 的第一个元素的指针之间的差异。 (取消引用确实使这个 UB,但仍然适用于任何正常的编译器)和指向 &arr 第一个元素的指针.
所有指针运算都是在指向类型的基本单元中完成的,在这种情况下是 int ,所以结果是 int的数量指向的两个地址之间的元素。

知道一个数组会自然地衰减到指向它的第一个元素的指针可能很有用,即表达式 arr将衰减到 &arr[0] ,其类型为 int * .
此外,对于任何指针(或数组) p和索引 i , 表达式 *(p + i)正好等于 p[i] .所以 *(&arr + 1)真的和 (&arr)[1]一样(这使得 UB 更加明显)。

关于c++ - *(&arr + 1) - arr 如何给出数组大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67509601/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com