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

leg*_*s2k 42 c size int sizeof char

我试过了

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

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

Ric*_*ton 35

在C'中'是一个整数常量(!?!),因此4对于您的体系结构是正确的.它被隐式转换为char以进行赋值.根据定义,sizeof(char)始终为1.标准没有说明单位1是什么,但它通常是字节.

  • + 1表示"但它通常是字节",我还在笑!:) (15认同)
  • 在SO帖子中阅读"隐式演员"时,我总是不寒而栗.没有隐式转换:转换始终是显式转换.C标准在6.3中说:"几个运算符自动将操作数值从一种类型转换为另一种类型.本子条款规定了这种*隐式转换*所需的结果,以及由转换操作产生的结果(*显式转换*)".你想说"隐式转换". (11认同)
  • 该标准将`sizeof`运算符定义为以**字节**返回大小,因此它不是*经常*,而是始终.在'sizeof运算符'的第二段中:'sizeof运算符产生其操作数的大小(以字节为单位). (6认同)
  • 它始终是字节.它可能不是八位字节. (6认同)
  • sizeof()测量(整数,我相信)CHAR_BITS的倍数.不多也不少.sizeof(char)== 1,顾名思义.通过将sizeof(type)与CHAR_BITS相乘,可以将另一种类型的位数设置为foudn.当然,大多数(如果不是全部)平台的CHAR_BITS为8. (4认同)
  • sizeof(char)是一个字节,因为它是C标准中byte的定义.该字节可以是8位或更多(在C中不能更少),并且可以是或可以不是计算机可寻址的最小单元(计算机体系结构中常见的字节的定义).字节的第三个通用定义是"用于字符编码的单位" - 即UTF-8或ISO-8859-X为8位,UTF-16为16位.通常,所有定义都一致,并将字节的大小设置为8位.通常,字节的第四个定义是"8位".如果他们不同意,您最好明确您使用的定义 (2认同)

小智 7

Th C标准说像'a'这样的字符文字是int类型,而不是char类型.因此它(在您的平台上)sizeof == 4.请参阅此问题以进行更全面的讨论.


Lau*_*ble 5

这是sizeof运营商的正常行为(见维基百科):

  • 对于数据类型,sizeof返回数据类型的大小.因为char,你得到1.
  • 对于表达式,sizeof返回变量或表达式的大小.当输入字符文字时int,你得到4.