C语言中char类型的大小

6

可能是重复问题:
为什么C语言中的字符字面量是int类型而不是char类型?

各位好,

我尝试在C语言中打印出char类型的大小。使用以下代码,我得到了如下输出结果:

int, 4
char, 1
char?, 4

为什么最后一个不同于第二个?谢谢。
#include <stdio.h>

main()
{
    int a = 2;
    char b = '2';
    printf("int, %d\n",sizeof(a));
    printf("char, %d\n",sizeof(b));
    printf("char?, %d\n",sizeof('a'));
}

由于这个问题已经在其他地方得到了解答,因此我投票关闭它(尽管这不是一个坏问题)。为什么C中的字符字面量是int而不是char? - Rafe Kettler
此主题的讨论以前已经提出过:https://dev59.com/i3RC5IYBdhLWcg3wCMc6 - Kurtis Zimmerman
1
请注意,按定义sizeof(char)为1 --- sizeof()以char单位返回值。这与字节不同!据我所知,没有办法在没有平台知识(即char中有多少字节)的情况下以_字节_形式获取结构的大小。 - David Given
C标准将“字节”定义为“可寻址的数据存储单元,足够大以容纳执行环境中基本字符集的任何成员”。它还说:“sizeof运算符产生其操作数(字节数)的大小”,并且“当应用于具有类型char的操作数时……结果是1”。它还指定了CHAR_BIT宏作为“不是位域(字节)的最小对象的位数”,以便在需要将本机字节转换为八位字节时使用。 - rob mayoff
1
是的。C标准将“byte”定义为等同于char。这与机器对字节的定义不同。如果你要处理字符占用多个机器字节的奇特平台,这将是一个巨大的障碍。幸运的是,这些情况在现今非常罕见,所以人们很少遇到这种情况。但当我第一次在规范中遇到这个问题时,我几乎把我的K&R书扔到了墙上。 - David Given
1个回答

24
在C语言中,像'a'这样的字符常量的类型是int。而在C++和Java中,像'a'这样的字符常量的类型是char。请注意,在翻译过程中需要保留HTML标记。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接