关于多维数组的问题,高手进!!!!!!!!!!!!!!

来源:百度知道 编辑:UC知道 时间:2024/06/07 06:50:54
印象中好像是n维数组相当于一个n重的指针,比如说
char p[2][2];和char **p;里面的p性质是一样的,p=&p[0]
可是如下代码:
#include<stdio.h>
void main()
{
char p[2][2]={{'a','\0'},
{'a','\0'}};
printf("p =%u\n*p =%u\n**p =%u\n&p[0][0]=%u\n&p[0]=%u\n&p =%u\n",p,*p,**p,&p[0][0],&p[0],&p);
}

的结果为:
p =1245052
*p =1245052
**p =97
&p[0][0]=1245052
&p[0]=1245052
&p =1245052
就是说p指向的是它自己!!!!!
这显然不可能,因为假如它指向自己,那个地址1245052存的是1245052这个地址数,而不是二维数组的内容。但是*p也确实是一个指针,就是说p确实是一个2重指针,哪个高手能解答一下这个是为什么啊??
那系统是怎样处理这个地址的呢?存在哪里?

p并不是一个指针,p就是一个地址,也就是说在执行程序时,系统并不会先找到符号p对应的地址,再到这个地址中取出p所指向的地址,再到p所指向的地址中找到实际的内容('a'), 而是直接去p对应的地址找字符.

这个地址保存在符号表中,建议去看<<C专家编程>>,里面讲的很清楚.