C语言中(*ptr)++后置自增运算符的执行逻辑疑问
关于C语言中(*ptr)++后置自增的输出疑问解答
先看你提供的完整代码:
#include<stdio.h> int main() { int x; int *ptr; ptr = &x; *ptr = 0; printf("x= %d\n", x); printf("*ptr= %d\n", *ptr); *ptr += 5; printf("x= %d\n", x); printf("*ptr= %d\n", *ptr); (*ptr)++; printf("x= %d\n", x); printf("*ptr= %d\n", *ptr); return 0; }
你对(*ptr)++的理解有个小误区:后置自增运算符确实是先返回当前值,再执行自增,但这里的关键点是——这个返回值并没有被你拿来使用。
我们一步步梳理变量变化:
- 第一步
*ptr = 0:x和*ptr的值都是0,前两个printf输出0。 - 第二步
*ptr +=5:等价于*ptr = *ptr +5,此时x和*ptr的值变成5,这一步的两个printf输出5。 - 第三步执行
(*ptr)++:这条语句执行时,先取出当前ptr的值(5)作为整个表达式的返回值,但**同时立刻把ptr的值加1变成6**。因为这条语句执行完成后才会调用后面的printf,所以printf读取的x和*ptr都是已经自增后的6。
如果把(*ptr)++放进printf里,比如写成printf("返回值:%d\n", (*ptr)++);,这时候才会输出原来的5,同时*ptr的值变成6。但你的代码里是先执行自增语句,再单独调用printf,所以读到的是自增后的结果。
内容的提问来源于stack exchange,提问作者user19538954
相关产品推荐
相关产品推荐

