【发布时间】:2012-03-21 21:18:21
【问题描述】:
各位,
我尝试在 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'));
}
【问题讨论】:
-
stackoverflow.com/questions/433895/…。鉴于此,我投票结束(尽管这不是一个坏问题)
-
这个话题之前有人讨论过:stackoverflow.com/questions/433895/…
-
请注意,
sizeof(char)是 1,根据定义 ---sizeof()返回以字符为单位的值。这与字节不同! AFAICT 如果没有平台知识(即一个字符中有多少字节),就无法以 bytes 为单位获取结构的大小。 -
@DavidGiven C 标准将“字节”定义为“可寻址的数据存储单元,大到足以容纳执行环境的基本字符集的任何成员”。它还说,“
sizeof运算符产生其操作数的大小(以字节为单位)”和“当应用于类型为char的操作数时...结果为 1。”它还将CHAR_BIT宏指定为“不是位域(字节)的最小对象的位数”,以防您想从本机字节转换为八位字节。 -
是的。 C 标准将 'byte' 定义为等同于 char。这与机器对字节的定义不同。如果您正在处理字符占用超过一个机器字节的奇异平台,那将是一个巨大的、巨大的陷阱。幸运的是,这些天来这些非常罕见,所以人们很少遇到这个,但是当我第一次在规范中遇到这个时,我差点把我的 K&R 副本扔到墙上。