关于C语言指针变量*p++ 、*(p++)、(*p)++的区别
5个回答
展开全部
*p++就等于*(p++)
p自加
先算出当前地址的值*p
然后指向下个地址
(*p)++是取出地址里的值
这个值自加
p还是指向原来的地址
p自加
先算出当前地址的值*p
然后指向下个地址
(*p)++是取出地址里的值
这个值自加
p还是指向原来的地址
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
首先搞明白一点,printf语句中表达式的执行顺序是从右向左的,并且对于*(q++),首先进行解引用操作,再自增,即*q,
q=q+1;所以说第一个printf的输出为2
2
对于第二个printf,首先执行(*q)++,再执行*p++,对于(*q)++可以转化为先执行(*q),即输出它的值,再执行(*q)=(*q)+1,最后输出*p,所以结果为3
2
q=q+1;所以说第一个printf的输出为2
2
对于第二个printf,首先执行(*q)++,再执行*p++,对于(*q)++可以转化为先执行(*q),即输出它的值,再执行(*q)=(*q)+1,最后输出*p,所以结果为3
2
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
*p++
由于++和*同优级,是自右向左的结合方向*(p++),因此等价于*(p++);他们的作用是得到P指向的变量值(*P),然后P
+1=》P
(*q)++,是先取P指向的变量值,然后其值再加一;
由于++和*同优级,是自右向左的结合方向*(p++),因此等价于*(p++);他们的作用是得到P指向的变量值(*P),然后P
+1=》P
(*q)++,是先取P指向的变量值,然后其值再加一;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1.
printf中表达式的计算是右结合的,即从右向左运算;但输出还是从左向右
2.
第一个printf,先取q所是单元的值显示,即为2,再对q++,即q所指单元地址后移一个单元,这里无意义;然后再对p指单元后自增,先输出2。“*”运算符的优先级高于“++”运算符。
3.
第二个printf,都是对p和q所指单元的值进行操作,(*q)++先输出a的值2,再将其值加1变为3;再将p所指单元的内容a的值输出3
printf中表达式的计算是右结合的,即从右向左运算;但输出还是从左向右
2.
第一个printf,先取q所是单元的值显示,即为2,再对q++,即q所指单元地址后移一个单元,这里无意义;然后再对p指单元后自增,先输出2。“*”运算符的优先级高于“++”运算符。
3.
第二个printf,都是对p和q所指单元的值进行操作,(*q)++先输出a的值2,再将其值加1变为3;再将p所指单元的内容a的值输出3
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询