关于C语言指针变量*p++ 、*(p++)、(*p)++的区别

inta=2,*p=&a,*q=&a;printf("%d%d\n",*p++,*(q++));p=&a;q=&a;printf("%d%d\n",*p,(*q)++);... int a=2,*p=&a,*q=&a;
printf("%d %d\n",*p++,*(q++));
p=&a;q=&a;
printf("%d %d\n",*p,(*q)++);

在教学视频上面看到这个
说答案是
2 2
3 2
但怎么都不明白怎么算的
刚刚学到指针
还不是很理解
麻烦高手说一下计算过程
怎么算出这个结果的
叩谢~
展开
 我来答
zsthit
2012-07-27 · TA获得超过463个赞
知道小有建树答主
回答量:155
采纳率:0%
帮助的人:173万
展开全部
首先搞明白一点,printf语句中表达式的执行顺序是从右向左的,并且对于*(q++),首先进行解引用操作,再自增,即*q, q=q+1;所以说第一个printf的输出为2 2
对于第二个printf,首先执行(*q)++,再执行*p++,对于(*q)++可以转化为先执行(*q),即输出它的值,再执行(*q)=(*q)+1,最后输出*p,所以结果为3 2
匿名用户
推荐于2017-11-25
展开全部
1. printf中表达式的计算是右结合的,即从右向左运算;但输出还是从左向右
2. 第一个printf,先取q所是单元的值显示,即为2,再对q++,即q所指单元地址后移一个单元,这里无意义;然后再对p指单元后自增,先输出2。“*”运算符的优先级高于“++”运算符。
3. 第二个printf,都是对p和q所指单元的值进行操作,(*q)++先输出a的值2,再将其值加1变为3;再将p所指单元的内容a的值输出3
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
软件技术收录
2012-07-27 · TA获得超过343个赞
知道小有建树答主
回答量:152
采纳率:0%
帮助的人:61.1万
展开全部
*p++ 由于++和*同优级,是自右向左的结合方向*(p++),因此等价于*(p++);他们的作用是得到P指向的变量值(*P),然后P +1=》P
(*q)++,是先取P指向的变量值,然后其值再加一;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
乐酷科技
2012-07-27 · TA获得超过1906个赞
知道小有建树答主
回答量:1067
采纳率:50%
帮助的人:625万
展开全部
*p++就等于*(p++) p自加 先算出当前地址的值*p 然后指向下个地址
(*p)++是取出地址里的值 这个值自加 p还是指向原来的地址
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
古城小城谣
2012-08-11 · TA获得超过112个赞
知道答主
回答量:50
采纳率:0%
帮助的人:30.7万
展开全部
对于第二条printf语句的打印结果我表示怀疑,我觉得答案应该还是 2 2,而不应该是3 2
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式