我只是想揭开C和指针的秘密(再次),我有一个关于指针和腐朽的问题。这是一些代码:
#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
指针本身的地址。 / p>
一切顺利, 大卫
答案 0 :(得分:3)
我知道数组,&amp;数组和数组[0]都是相同的,因为它们会衰减到指向完全相同位置的指针。
没有。你不明白。 array
是数组类型,在大多数情况下将转换为指向其第一个元素的指针。因此,除array
运算符的操作数外,&array[0]
和sizeof
与表达式相同。 &array
是数组array
的地址,类型为int (*)[3]
。详细阅读此处:What exactly is the array name in c?。
p_array
是指向数组array
的指针并存储其地址,而&p_array
是p_array
的地址。
答案 1 :(得分:2)
但为什么
p_array
的位置不等于&p_array
?
&p_array
是指针本身的地址(0x7fff5b0e29b0
),而p_array
是指向array
的指针,其值是array
的地址 1 ,(0x7fff5b0e29bc
)。
1。第一个元素的地址。功能
答案 2 :(得分:0)
您只是介绍了另一个变量。因此它具有值(0x7fff5b0e29bc)和地址(0x7fff5b0e29b0)。对于你引入的任何变量都是如此