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

如题所述

c语言的指针,里面存放的是
物理地址。
而*p

取内容的意思,即
取当前存放内容对应(指向)的地址
里面的内容。
而p++
就是把
p里面的内容+1个单位,因为
p存的是地址,所以是
地址+1,也就是下一个地址。那么指针p
就指向了
下一个地址了。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2020-04-24
首先搞明白一点,printf语句中表达式的执行顺序是从右向左的,并且对于*(q++),首先进行解引用操作,再自增,即*q,
q=q+1;所以说第一个printf的输出为2
2
对于第二个printf,首先执行(*q)++,再执行*p++,对于(*q)++可以转化为先执行(*q),即输出它的值,再执行(*q)=(*q)+1,最后输出*p,所以结果为3
2
第2个回答  2019-12-20
*p++
由于++和*同优级,是自右向左的结合方向*(p++),因此等价于*(p++);他们的作用是得到P指向的变量值(*P),然后P
+1=》P
(*q)++,是先取P指向的变量值,然后其值再加一;
第3个回答  2019-09-12
*p++就等于*(p++)
p自加
先算出当前地址的值*p
然后指向下个地址
(*p)++是取出地址里的值
这个值自加
p还是指向原来的地址
第4个回答  2019-04-25
1.
printf中表达式的计算是右结合的,即从右向左运算;但输出还是从左向右
2.
第一个printf,先取q所是单元的值显示,即为2,再对q++,即q所指单元地址后移一个单元,这里无意义;然后再对p指单元后自增,先输出2。“*”运算符的优先级高于“++”运算符。
3.
第二个printf,都是对p和q所指单元的值进行操作,(*q)++先输出a的值2,再将其值加1变为3;再将p所指单元的内容a的值输出3
相似回答