关于C语言中指针和数组名的一些疑惑

# include<stdio.h>

int main (void)
{
double arry[3]={2,5,7};
double *p;
p = arry;
printf("arry的地址 = %p\n",arry);
printf("p的地址 = %p\n",p);
return 0;
}
这里输出的结果是
arry的地址 = 0018FF30
p的地址 = 0018FF30

p是一个指针变量,而arry是一个数组名也就是一个指向数组的首地址的指针。如果让p=arry应该是表示p的内存单元里面存放的内容是arry的地址,而不是p的地址等于arry的地址。但是为什么这里的输出结果中p的地址和arry的地址是相等的?

第1个回答  2014-04-02
编译程序将array数组的起始地址记录下来,你程序中用到array时就会用这个起始地址进行替换,也就是说array是这个数组起始地址的别名,array并不是变量只是个名称,具体变量为array[0],array[1],array[3]
p=array;就是用这个起始地址赋值给变量p,也可以写成p=&array[0];
第2个回答  2014-04-02
p的地址是 &p
printf("p的地址 = %p\n",&p); //这样输出的才是p的地址
第3个回答  2014-04-02
printf("p的地址 = %p\n",p);

为什么会觉得这是输出p的地址,总觉得这行代码的作用应该是输出(按问题中的说法)“p的内存单元里面存放的内容”才对

本回答被提问者采纳