我试过
printf("%d, %d\n", sizeof(char), sizeof('c'));
并得到1, 4作为输出。如果一个字符的大小是 1,为什么'c'
给我 4?我想这是因为它是一个整数。因此,当我这样做char ch = 'c';
时,当它被分配给 char 变量时,是否会发生从 4 字节值到 1 字节值的隐式转换?
在 C 中,'a' 是一个整数常量(!?!),因此 4 对您的体系结构是正确的。它被隐式转换为 char 以进行赋值。根据定义,sizeof(char) 始终为 1。该标准没有说明单位 1 是什么,但通常是字节。
C 标准说像“a”这样的字符文字是 int 类型,而不是 char 类型。因此(在您的平台上)它具有 sizeof == 4。请参阅此问题以进行更全面的讨论。
这是sizeof
操作员的正常行为(参见维基百科):
sizeof
返回数据类型的大小。对于char
,你得到 1。sizeof
返回变量或表达式类型的大小。当字符文字键入为int
时,您会得到 4。这包含在 ISO C11 中,6.4.4.4 Character constants
尽管它与早期的标准基本没有变化。这在段落中指出/10
:
整数字符常量的类型为 int。包含映射到单字节执行字符的单个字符的整数字符常量的值是被解释为整数的映射字符表示的数值。
根据 ANSI C 标准,在使用整数的上下文中将 achar
提升为 an ,因此您在不同的值int
中使用了整数格式说明符。printf
char 通常是 1 个字节,但它是基于运行时和编译器定义的实现。