c语言若有下列说明和语句:int a[4][5], (*p)[5]; p = a; 则对a数组元素

c语言若有下列说明和语句:inta[4][5],(*p)[5];p=a;则对a数组元素的正确引用A)p+1B)*(p+3)C)*(p+1)+3D)*(*p+2)答案是D。... c语言若有下列说明和语句:int a[4][5], (*p)[5]; p = a; 则对a数组元素的正确引用
A) p+1 B) *(p+3) C) *(p+1)+3 D) *(*p+2)
答案是D。但我不知道为什么,请帮我解释详细一点,谢谢!
展开
 我来答
iiiiiiiipl
2019-06-03 · TA获得超过9923个赞
知道答主
回答量:68
采纳率:66%
帮助的人:3.9万
展开全部

如果定义int (*p)[n];p1=a;p1++后,p指向a[1][0];  

则p+j将指向a[0]数组中的元素a[0][j]。

由于a[0]、a[1]┅a[M-1]等各个行数组依次连续存储,则对于a数组中的任一元素a[i][j],指针的一般形式如下:

p+i*N+j,相应的如果用p来表示,则为*(p+i)+j;

元素a[i][j]相应的指针表示为:

*( p+i*N+j) ,相应的如果用p1来表示,则为*(*(p+i)+j)。

推出以下的等价关系:

a+i == p+i;
a[i] == p[i] == *(a+i) == *(p+i);
a[i][j] == p[i][j] == *(a[i]+j) == *(p[i]+j) == *(*(a+i)+j) == *(*(p+i)+j)。

扩展资料:

对上述二维数组a,虽然a[0]、a都是数组首地址,但二者指向的对象不同,a[0]是一维数组的名字,它指向的是a[0]数组的首元素,对其进行“*”运算,得到的是一个数组元素值,即a[0]数组首元素值,因此,*a[0]与a[0][0]是同一个值;

而a是一个二维数组的名字,它指向的是它所属元素的首元素,它的每一个元素都是一个行数组,因此,它的指针移动单位是“行”,所以a+i指向的是第i个行数组,即指向a[i]。对a进行“*”运算,得到的是一维数组a[0]的首地址,即*a与a[0]是同一个值。

参考资料:

百度百科-数组指针

magry521
推荐于2017-11-27 · 超过14用户采纳过TA的回答
知道答主
回答量:33
采纳率:100%
帮助的人:32.9万
展开全部
首先呢,a是二维数组,不解释。
然后呢,p是一个指针,什么样的指针呢,就是指向一维数组的指针,而且这个一维数组的元素个数呢是5.
然后呢,p=a;就是把p指向a数组。

分析选项:
A p+1 .因为p是一维数组指针,所以p每+1就是+1行。错误。
B *(p+3)是指第4行的首地址,访问不到元素。需要再*
C *(p+1) + 3 对地址+3 没啦意义
D *(*p+2) *p是第0行首地址 +2 呢就是第二个元素的地址,*取数据咯。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
信恒家居
2019-07-30 · 超过12用户采纳过TA的回答
知道答主
回答量:116
采纳率:46%
帮助的人:10.2万
展开全部
本题中定义了一个二维数组c和一个数组指针p并初始化让它指向c,显然此时p中的各元素为地址,
A中p+1,此时的1代表的长度是整个二维数组c的长度,p+1将让p指向c数组后面的元素,故不能引用c数组中的成员,故选项A错误;同理,选项B和选项C都不正确,
D中p[0]+2代表的是第一行第三个元素的地址,而*(
p[0]+2)将代表第一行第三个元素的值。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
键盘未找到
2015-06-21 · TA获得超过328个赞
知道小有建树答主
回答量:403
采纳率:100%
帮助的人:266万
展开全部
A.表示&a[1].
B.a[3]
C.&a[1][3]
D.a[0][2]
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式