c语言中指针*p++为什么和*(p++)等价?

2024-12-24 14:20:01
推荐回答(5个)
回答1:

p++ 是后缀加加,C/C++规定,后缀加加,在当前表达式中 不自增1,而用原来的值,出了表达式后再自增 1.

不同于前缀加加。前缀加加 ++p 的话,先增1,然后用于表达式,出了表达式就不再自增。

所以,x= *(p++) 就等于 x=*(p); 或 x=*p; 执行完毕后 再 做 p=p+1.

x= *p++ 里是 后缀加加, 当前表达式中 不自增1, 所以它就等价于 *p.

回答2:

第一个问题答案:首先*p++中*(取值)的优先级和++是同一优先级的,*( 取值)和++是从右往左结合的,即在执行语句*p++时,是从右往左执行的,所以*p++和*(p++)等价;
第二个问题答案:
就是楼上金色潜鸟回答的,p++做表达式变量时,在表达式中先使用p的值,等做完表达式之后p的值再+1;如果是++p的话就是先自+1,再参与表达式的计算。
记住一个公式好了,++在前,先自加再运算。++在后,先运算再++

回答3:

因为单目运算符++(自增运算)和*(这里的*是指针运算符而不是乘法运算符),它们的优先级别是同一级的,这一级的结合顺序自右向左,所有,*p++,先运行p++,后执行*运算符。
详细情况可以看一下运算符号优先级详情。

回答4:

*和++具有相等的优先级,但它在结合时是从右向左进行的,p++在C中是先使用p后加1的,所以
*(p++) == (x = *p,p = p+1)

回答5:

子表达式p++的值总是p自增前的值,这是C语言的规定