C语言中定义int c[4][5],(*p)[5];p=c;其中p、p[0]、*p有什么区别?

如题所述

int
*p[4],就是p本质上是个数组,只不过数组中的每个元素都是指针
int
(*p)[4],就是p本质上是个指针,指针指向一个一维的数组
这种题的话,其实可以先根据运算符的优先级、结合性,先确定标识符本质上是一个什么,然后再去补充
例如,int
*p[3],先根据优先级,等效于*(p[3]),所以p本质上是一个有三个元素的数组;那么数组的每个元素又是什么呢?是一个指针;那指针指向的又是什么呢?是指向一个int型的数据;所以整理一下就是p是一个有三个指向int数据的指针的数组,本质上就是一个数组
温馨提示:答案为网友推荐,仅供参考
第1个回答  2020-04-16
这个不太好理解啊!
第一个int
c[4][5]是二维数组,
可以理解为有4个元素的数组,其中每个元素又是5个整数的数组.
第二个int
(*p)[5]是数组指针,
p是一个指针,
它指向的是int
[5],即5个整型,
这时p++是增加20个偏移.与int
*p[5]不同;
p
=
c
就是数组指针p指向
&c[0],
当p
=
c时p[0]就是c[0],
p[1]就是c[1];
p[1][0]就是c[1][0];
上面的定义可用如下替换:
typedef
int
MyType[5];//定义一个新的类型,大小为5个整数.
MyType
c[4];
MyType
*p;
p
=
c;
这样就好理解啦.
C中指针与数组关系较复杂,
但只要把a[5],
b[4][5],
c[3][4][5],
*p1,
*p1[5],
*p2[4][5],
(*p3)[5]等搞懂就差不多了.
^_^
第2个回答  2019-12-14
int
c[4][5]
是整数型二维数组
(*p)[5];
是整数型指针数组
p=c
就是指向a[4][5]的首地址a[0][0];
p[0]
中指针,只能指向地址。
例p[0]=a[0];
p[1]=a[1];
*p
就是P指向的值。
相似回答