gpt4 book ai didi

c - 指针与其地址之间的区别

转载 作者:太空狗 更新时间:2023-10-29 16:11:06 27 4
gpt4 key购买 nike

我只是想揭开 C 和指针的 secret (再一次),我有一个关于指针和衰减的问题。这是一些代码:

#include <stdio.h>

int main() {
int array[] = { 1, 2, 3 };
int (*p_array)[] = &array;

printf("%p == %p == %p\n", array, &array, &array[0]);
printf("%p == %p\n", p_array, &p_array);

return 0;
}

当我运行它时,我得到了这个输出:

0x7fff5b0e29bc == 0x7fff5b0e29bc == 0x7fff5b0e29bc

0x7fff5b0e29bc == 0x7fff5b0e29b0

我知道 array、&array、&array[0] 都是一样的,因为它们衰减到指向完全相同位置的指针。

但这如何应用于实际指针,这里是 *p_array,它是指向 int 数组的指针,对吗? p_array 应该指向存储数组第一个int 的位置。但是为什么p_array的位置不等于&p_array呢?

也许这不是最好的例子,但如果有人能启发我,我将不胜感激......

编辑 p_array指的是数组首元素的地址,而&p_array指的是的地址p_array 指针本身。

祝一切顺利,大卫

最佳答案

I understand that array, &array, &array[0] are all the same, because they decay to a pointer which point to the exact same location.

没有。你不明白。 array 是数组类型,在大多数情况下将转换为指向其第一个元素的指针。因此,array&array[0] 与表达式相同,除了 sizeof 运算符的操作数。 &array是数组array的地址,类型是int (*)[3]。详细阅读此处:What exactly is the array name in c? .

p_array 是指向数组array 的指针并存储它的地址,而&p_arrayp_array 的地址。

关于c - 指针与其地址之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34473948/

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