【问题标题】:size of char type in C [duplicate]C中char类型的大小[重复]
【发布时间】:2012-03-21 21:18:21
【问题描述】:

可能重复:
Why are C character literals ints instead of chars?

各位,

我尝试在 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 副本扔到墙上。

标签: c char sizeof


【解决方案1】:

在 C 中,像 'a' 这样的字符常量的类型为 int

这与 C++ 和 Java 不同,其中像 'a' 这样的字符常量的类型为 char

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-02-10
    • 1970-01-01
    • 1970-01-01
    • 2020-06-06
    • 1970-01-01
    • 2011-11-07
    • 2021-01-02
    相关资源
    最近更新 更多