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

sizeof('0')的值是多少?为何代码运行结果与预期不符?

为什么sizeof('0')的结果是4而不是1?

这是个非常经典的C语言入门陷阱,我当初刚接触C的时候也被这个问题困惑过!咱们一步步拆解原因:

核心区别:char变量 vs 字符常量的类型

  • 你定义的变量c是char类型,在绝大多数系统中char的大小是1字节,所以sizeof(c)输出1完全符合预期。
  • 但C语言标准明确规定:单引号包裹的字符常量(比如'0')的类型是int,而不是char!它的值是该字符对应的ASCII码数值(比如'0'的ASCII码是48)。

为什么是int?

这是C语言设计时的历史遗留规则:早期C语言中,字符在参与运算时会被自动提升为int类型,为了保持一致性,字符常量本身就被定义为int类型。在大多数现代系统中,int的大小是4字节,所以sizeof('0')自然就返回4了。

额外对比:C++中的不同

如果你用C编译这段代码,结果会是1 1——因为C标准把字符常量的类型改成了char,这也是C和C++的一个细微差异点。

直观验证

你可以试试运行这段代码,结果会更清晰:

#include <stdio.h>
int main() {
    printf("%d %d %d", sizeof('0'), sizeof(48), sizeof(int));
    return 0;
}

输出应该是4 4 4,因为'0'和48都是int类型,和int的大小完全一致。

内容的提问来源于stack exchange,提问作者吴小葱

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:25:23