C语言 以下语句正确的是

C语言 以下语句正确的是A.int a[3][4],(*p)[4];p=a;
B.int a[3][4],*p[4];p=a;
C.int a[3][4],*p;p=a;
D.int a[3][4],**p;*p=a;
已经知道答案是A了 但是A.B.C.D这几个表示被绕晕了 希望能有人能每个详细解释一下意思,还有A和C的两个指针差别讲一下

A.a是一个3行4列的二维数组,p是一个数组指针,指向一个拥有4个元素的数组。p=a,令p指向a的第一行元素;
B.a是一个3行4列的二维数组,p是一个拥有4个元素的数组,数组中的每个元素都是int型的指针。p=a,试图将一个数组赋给另一个数组,错误;
C.a是一个3行4列的二维数组,p是一个int型的指针,p=a,a的每个元素是拥有4个int元素的数组,p与a类型不匹配,错误;
D.a是一个3行4列的二维数组,p是一个二级指针,指向一个int型的指针,*p=a,此时p未初始化,是野指针,*p试图取其内容,严重错误。追问

二维数组名不是代表首地址吗 那C中把a赋给p不就是指针指向a[0]吗 为什么不匹配呢

然后书上是这么讲的 对A又有疑问了

追答

二维数组的元素是一维数组,所以p应该是指向int型一维数组的数组指针,而不是指向int型的指针。

追问

那么A中p=a是指向行还是a[0]呢

追答

指向a[0],a[0]表示a的第一行,它是一个拥有4个元素的一维数组。

追问

书上写要用p=&a是为什么

我之前在devc上运行输入p=a编译不通过

追答

p是数组指针,而a是一维数组,所以p指向a的地址。
这和p是int型指针,a是int型变量,p=&a使p指向a的地址是一个道理。

追问

噢 谢谢

温馨提示:答案为网友推荐,仅供参考

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网