在C中,为什么sizeof(char)1,当'a'是int时?

时间:2010-02-12 13:26:41

标签: c size char int sizeof

我试过

printf("%d, %d\n", sizeof(char), sizeof('c'));

并输出 1,4 。如果一个角色的大小是一,为什么'c'给我4?我想这是因为它是一个整数。所以,当我char ch = 'c';时,是否会发生隐式转换,从4字节值到1字节值,当它被分配给char变量时?

5 个答案:

答案 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个字节,但这是基于运行时和编译器定义的实现。