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

C语言中整型提升发生时,sizeof(char)返回1而非4是否符合预期?

关于C语言整型提升与sizeof(char)的疑问解答

示例代码

#include <stdio.h>

int main()
{
   unsigned char c = 'a';
    c = c + 3;
    printf("%c ", c);
    printf("%zu",sizeof(c));

    return 0;
}

代码输出

d 1

用户疑问

在C语言中隐式发生整型提升时,char类型的大小为何仍输出1字节而非4字节?按理解其大小应变为32位,预期输出应为d 4。

解答

  • 整型提升是运算过程中的临时转换:当char参与算术运算(比如c + 3)时,会被临时提升为int类型进行计算,但这只是运算阶段的临时处理,变量c本身的类型和存储大小完全没变,还是unsigned char。
  • sizeof只关注变量本身的类型:sizeof(c)计算的是变量c实际类型的大小,而不是运算时临时提升后的int类型大小。根据C语言标准,char(包括unsigned char)的大小固定为1字节,和整型提升没有关系。
  • 再梳理下流程:c + 3时,c被临时转成int计算出结果,随后这个结果被截断为unsigned char类型赋值回c,整个过程中c始终是1字节的变量,所以sizeof(c)返回1是完全正确的。

内容的提问来源于stack exchange,提问作者sai praveen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 09:02:03