You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 00:35:31