输出:
a=1606416992, &a=1606416992,
*a=1, &(*a)=1606416992
Run Code Online (Sandbox Code Playgroud)
程序:
#include "stdio.h"
main()
{
int a[4]={1,2,3,4};
printf("a=%u, &a=%u, *a=%d, &(*a)=%u\n",a,&a,*a,&(*a));
}
Run Code Online (Sandbox Code Playgroud)
我知道数组名称是指向数组第一个元素的指针.但我怀疑是指针应该存储在某个地方,它应该有一个地址位置.如果是这样,如何存储位置"1606416992"元素"1"并且相同的"1606416992"是指向数组的指针的地址位置?
请帮忙澄清一下.
在表达式中使用时,数组名称会衰减为指向第一个元素的指针.但是,此规则有3个例外:
sizeof();&运算符获取;在你的代码中,两者a和&(*a)是相同的东西,因为*a它等同于a[0],因此,&(*a)地址是相同的a.
&a具有与a因为相同的地址&,数组不会衰减成指针.因此,&a表示数组的地址,即可以找到第一个元素的地址.有了&a,你没有把指针的地址带到第一个元素,你正在获取数组的地址,因为a在这种特殊情况下它不是指向第一个元素的指针.
编辑
如其他答案中所述,您应该%p在转换为void *:之后使用打印指针值:
printf("a=%p, &a=%p, *a=%d, &(*a)=%p\n",(void *) a, (void *) &a,*a,(void *) &(*a));
Run Code Online (Sandbox Code Playgroud)