关于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
但怎么都不明白怎么算的
刚刚学到指针
还不是很理解
麻烦高手说一下计算过程
怎么算出这个结果的
叩谢~ 展开
printf("%d %d\n",*p++,*(q++));
p=&a;q=&a;
printf("%d %d\n",*p,(*q)++);
在教学视频上面看到这个
说答案是
2 2
3 2
但怎么都不明白怎么算的
刚刚学到指针
还不是很理解
麻烦高手说一下计算过程
怎么算出这个结果的
叩谢~ 展开
5个回答
推荐于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
2. 第一个printf,先取q所是单元的值显示,即为2,再对q++,即q所指单元地址后移一个单元,这里无意义;然后再对p指单元后自增,先输出2。“*”运算符的优先级高于“++”运算符。
3. 第二个printf,都是对p和q所指单元的值进行操作,(*q)++先输出a的值2,再将其值加1变为3;再将p所指单元的内容a的值输出3
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
*p++ 由于++和*同优级,是自右向左的结合方向*(p++),因此等价于*(p++);他们的作用是得到P指向的变量值(*P),然后P +1=》P
(*q)++,是先取P指向的变量值,然后其值再加一;
(*q)++,是先取P指向的变量值,然后其值再加一;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
*p++就等于*(p++) p自加 先算出当前地址的值*p 然后指向下个地址
(*p)++是取出地址里的值 这个值自加 p还是指向原来的地址
(*p)++是取出地址里的值 这个值自加 p还是指向原来的地址
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
对于第二条printf语句的打印结果我表示怀疑,我觉得答案应该还是 2 2,而不应该是3 2
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询