C语言中指针问题:设int a[3][5],那么&a[0]的意义是什么呢?

还有,设int (*p)=5;p=&a[0];那么p的含义是?*p的含义是?为什么在p前要带2个*才是指向数据的而不是只用带一个*就行了呢?小白顿首。

a[0]是一个内存地址,是a[0]这个一维数组的开始地址。可能在char类型中使用比较多,char a[3][5]的话,a[0]就是一个字符数组的开始地址了,可以读入或输出。
int (*p)[] 是一个指向数组的指针吧,但是这个赋值不知道是怎么一回事,貌似有问题。*(p+i)也是指向一个数组,所以需要两个*,比如*( *(p+i)+j )表示一个二维数组的 i 维 j 个元素。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-07-04
p相当于一个二级指针,a[0]是相当于一个一级指针,他指向二维数组的第一行,所以p=&a[0]相当于把指针的地址给了p,*p =a[0],**p=a[0][0]
第2个回答  2012-07-03
这是一个2级指针,指向int类型的指针的指针。 *p 就是1级指针,就是一个一维数组的数组名,再*才是数据!追问

那printf("%d\n",p);和printf("%d\n",*p);输出的一样?难道说p指向的所存的地址和(*p)指向的数据的地址一样么?不懂

本回答被提问者和网友采纳
第3个回答  2012-07-03
int (*p)=5;语法错误
int *p;//定义指针p
*p = 5; //指针赋值

如果
int a[3][5];
&a[0]等价于a[0][0];
第4个回答  2012-07-03
dgsgg
相似回答