【问题标题】:the value of sizeof('0') is how much? [duplicate]sizeof('0') 的值是多少? [复制]
【发布时间】:2019-07-30 12:12:02
【问题描述】:
#include <stdio.h>
int main()
{
    char c = '0';
    printf("%d %d",sizeof(c), sizeof('0'));
    return 0;
}

我希望输出是 1 1。但实际结果是 1 4。

【问题讨论】:

  • '0' 是一个整数。
  • sizeof() 返回一个size_t,用%zu 正确打印。用%d 打印size_t 是未定义的行为。
  • 你会喜欢我曾经使用过的 DSP,它有 CHAR_BIT == 16sizeof(char) == sizeof(int)——在 this 机器上,你会收到你期望的输出...

标签: c char sizeof literals


【解决方案1】:

与 C++ 相反,C(整数)字符常量的类型为 int

来自 C 标准(6.4.4.4 字符常量)

10 一个整数字符常量具有 int 类型

将引用与 C++17 标准(5.13.3 字符文字)中的引用进行比较

2 不以 u8、u、U 或 L 开头的字符文字是 普通字符文字。一个普通的字符文字 包含在执行字符集中可表示的单个 c-char 类型为char,其值等于执行字符集中c-char编码的数值......

至于这个表达

sizeof(c)

然后它提供char 类型的对象的大小。 char 类型的对象的大小始终等于 1

来自 C 标准(6.5.3.4 sizeof 和 alignof 运算符)

4 当 sizeof 应用于 char 类型的操作数时,无符号 char,或signed char,(或其合格版本)结果是 1....

注意函数 printf 的有效调用看起来像

printf("%zu %zu",sizeof(c), sizeof('0'));

【讨论】:

    【解决方案2】:

    C 中的字符文字('0''a''d''.')的类型为 int(与 C++ 中的类型不同,它们的类型为 char)。

    所以你会进入C:

    sizeof(char) == 1
    sizeof('0')  == sizeof(int) // note that this is not necessarily 4!
    

    而在 C++ 中,您将拥有:

    sizeof(char) == 1
    sizeof('0')  == sizeof(char)
    

    【讨论】:

      【解决方案3】:
      sizeof('0')
      

      其实是

      sizeof(ASCII value of '0')

      是整数。因此它正在打印sizeof(int)

      【讨论】:

      • 不在克林贡语或 EBCDIC 计算机中 :)
      • @pmg 这些系统什么时候会灭绝?
      • @machine_1 当 std::sentient 添加到 C++ STL 时。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-30
      • 2014-06-04
      • 1970-01-01
      • 2017-03-12
      • 2011-12-19
      • 1970-01-01
      相关资源
      最近更新 更多