【问题标题】:Why sizeof() return different values when input is (char) and 'A' [duplicate]为什么当输入为(char)和'A'时sizeof()返回不同的值[重复]
【发布时间】:2018-09-20 01:56:14
【问题描述】:

我正在处理sizeof()

当我以 char 数据类型输入参数时

J=sizeof(char);

输出为 1。

但是当我输入这样的论点时

J=sizeof('A');

我得到的输出是 4。

由于它的参数是 char 数据类型,它应该返回 1 作为输出,为什么它返回 4/2(取决于 32 位/64 位设备)。

【问题讨论】:

  • sizeof 'A' 在 C++ 中总是返回 1。请不要在您的问题中标记随机语言。
  • 您将此问题标记为 C 和 C++,但您实际使用的是哪个?这是一个可以发挥作用的案例!
  • cc++?它们是具有不同规则的不同语言,很可能您一次只使用其中一种。
  • 只需检查 C 标准,或者,我希望,任何包含文字描述的半体面的教程,你就会明白。
  • @Quentin 感谢您的建议,这个地方的新人下次会照顾好:)

标签: c character sizeof


【解决方案1】:

在 C 中,'A'不是char 类型的常量,它是int 类型。 (在 C++ 中是char。)

C 是这方面的一致性模型;参看。 C++,其中'a' + 'b'int 类型,就像'ab' 这样的多字符常量。

【讨论】:

【解决方案2】:

看来你的意思是 C。

在 C 字符中(在 C 字符常量中调用)类型为 int。所以sizeof( 'A' ) 等价于sizeof( int ) 并且通常产生4

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

10 整数字符常量的类型为 int。整数的值 包含单个字符的字符常量,该字符映射到 单字节执行字符是 映射字符的表示解释为整数。这 包含多个字符的整数字符常量的值 字符(例如,'ab'),或包含字符或转义序列 不映射到单字节执行字符,是 实现定义。如果一个整数字符常量包含一个 单个字符或转义序列,其值是结果 当一个 char 类型的对象的值是单 字符或转义序列转换为 int 类型。

sizeof( char ) 总是等于 1。

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

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

【讨论】:

  • @chux 最初,问题用 C++ 标签标记,其中使用了术语字符文字。
  • 是的,这样的 C/C++ 问题比需要的更复杂。
猜你喜欢
  • 2012-05-29
  • 2018-03-05
  • 1970-01-01
  • 2021-12-17
  • 2014-05-25
  • 2021-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多