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

为何C语言代码中a未更新为1?sizeof运算符特性解析

为什么sizeof(a++)没有让变量a自增?

先看你的代码:

#include <stdio.h>

int main()
{
    int x, a = 0;
    x = sizeof(a++) ? printf("Geeks for Geeks\n") : 0;
    printf("Value of x:%d\n", x);
    printf("Value of a:%d", a);
    return 0;
}

你预期a的值变为1,但实际输出中a仍为0,核心原因是**sizeof运算符的操作数不会被求值**。

C语言规定,sizeof的作用是计算操作数的类型大小,它不会执行操作数中的表达式。这里的a++只是用来告知sizeof:需要计算这个表达式结果的类型(也就是int类型)的大小,而非真的执行a自增的操作。不管你在sizeof里写的是a++、++a还是其他复杂表达式,只要作为sizeof的操作数,都不会被实际运行,变量的值自然不会改变。

再拆解下代码逻辑:

  • sizeof(a++)计算的是int类型的大小(通常为4),这个值非零,因此三目运算符会执行printf("Geeks for Geeks\n")
  • printf的返回值是输出的字符总数("Geeks for Geeks"加上换行符一共16个),所以x被赋值为16
  • 但a++从未被执行,所以a保持初始值0

内容的提问来源于stack exchange,提问作者Neal Saxena

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 18:38:11