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
相关产品推荐
相关产品推荐

