gpt4 book ai didi

c++ - C 和 C++ 中的指针

转载 作者:行者123 更新时间:2023-11-30 21:33:02 26 4
gpt4 key购买 nike

我正在探索 C 和 C++ 中的指针概念。我已经读了很多关于它的文章,但仍然有一些疑问。期待你们中的任何人都可以清除它们。

这是我的问题:

声明的一维数组如下:

int array[5] = {1, 2, 3, 4, 5};

现在我正在打印以下值:

printf("array--->%u", array);       // Output: 3199709072
printf("&array--->%u", &array); // Output: 3199709072
printf("*array--->%d", *array); // Output: 1
printf("*&array--->%d", *&array); // Output: 3199709072

前三个输出与我的预期相同,但我不明白第四个输出。

为什么要打印数组第一个元素的地址?

我使用 *&array 表达式,这意味着我明确指定我想要 &array 地址处的值,但它仍然打印第一个元素的地址。

有什么想法吗?

最佳答案

当一元 * 和一元 & 结合在一起时,它们会抵消彼此的效果。 *&array 相当于array。由于数组在作为参数传递给函数时会衰减为指向其第一个元素的指针,因此 array 将给出数组 array 的第一个元素的地址。

换个角度看,表达式 *&array 将被解析为 (* (&array) );检索数组 array 的地址,然后取消引用它。由于 &array 是数组的地址,因此取消引用它将返回数组本身,但根据规则,取消引用的数组将衰减为指向其第一个元素的指针,并且它将生成表达式 *&array 相当于 array

<小时/>

注意:使用%p说明符来打印地址。喜欢

printf("array--->%p", (void *)array);   

否则,使用错误的说明符将调用未定义的行为。

关于c++ - C 和 C++ 中的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41795394/

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