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