c语言的问题 int a[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12}; int (*p)[4]; p = a;

以上为定义,为啥不能使p[0]=p[1];... 以上为定义,为啥不能使p[0] = p[1]; 展开
 我来答
百度网友c0588c1
2013-06-22 · TA获得超过522个赞
知道小有建树答主
回答量:138
采纳率:0%
帮助的人:65.3万
展开全部

int (*ptr)[3]=a这句,将a的首地址赋值给了ptr,ptr表示的是指向一个含有三个Int的数组的指针,

*((ptr+1)[2])等价于*((ptr+1)+2),等价于*(ptr+3),这表示从数组a的首地址向后移动3个单位,每个单位为一个含有3个Int的数组,所以一共向后移动了9个单位,即得出运行结果10!


要想正确表达a[1][2],应该是(*(ptr+1))[2],数组的运算符[ ]比间值运算符*的优先级高,(*(ptr+1))[2]表示a向后移动一个单位即三个Int,此时ptr指向4,再往后移动2个Int指向6。


其实遇到这类问题画内存结构图比较容易理解了


cdyzxy
2013-04-15 · TA获得超过2.1万个赞
知道大有可为答主
回答量:1.4万
采纳率:85%
帮助的人:3751万
展开全部
因为p[0]和p[1]分别指向4个整数
如果你是需要将p[1]指向的4个整型数据一次性赋值给p[0]指向的4个单元,那么c语言没有这么简单的赋值,只好编个程序一个一个地赋值;
如果你是需要把p[0]指向p[1],那么你可以写:p[0]=&p[1];
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
_ahappyboy
2013-04-13 · TA获得超过190个赞
知道小有建树答主
回答量:152
采纳率:0%
帮助的人:111万
展开全部
我试了,p[0]为不可修改的左值。
只知道这个语句本身是有问题的,p[1]是依赖p[0]的。p[0]怎么可能由p[1]赋值呢?
或许汇编的角度更有说服力。期待正解!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式