【问题标题】:Why is sizeof('3') == 4 using the GCC compiler? [duplicate]为什么 sizeof('3') == 4 使用 GCC 编译器? [复制]
【发布时间】:2013-10-19 12:38:40
【问题描述】:

为什么下面程序的输出是 4?

#include <stdio.h>

int main()
{
    printf("%d\n", sizeof('3'));
    return 0;
}

【问题讨论】:

  • 因为 'x' 文字是 ints,而不是 chars。
  • 这可能会有所帮助:Size of character ('a') in C/C++
  • @Shanpriya:是什么促使您提出这个问题?你期望这个程序输出什么?为什么?
  • @AndreyT :我认为声明为 sizeof('3') 或 sizeof('a') 因为值用单引号括起来我认为它们的意思是字符会导致输出为 1 而不是4.
  • 谢谢@Jost 它确实有帮助

标签: c gcc char sizeof


【解决方案1】:

因为字符常量的类型是int,而不是char(而你的平台上int的大小是4)。

C99 草案规范说:

整数字符常量的类型为 int。

这可能看起来很奇怪,但请记住,您可以这样做:

const uint32_t png_IHDR = 'IHDR';

换句话说,单个字符常量可以包含多个实际字符(四个,以上)。这意味着生成的 不能具有 char 类型,因为那样它将立即溢出并且毫无意义。

注意:上面的内容并不是一个非常很好的方式来做它似乎暗示的事情,这是另一个讨论。 :)

【讨论】:

    【解决方案2】:

    字符文字是int

    在 C 类型的字符常量中,如 '3' 是 int

    sizeof(character_constant)==sizeof(int)==&gt; In your case sizeof(int)==4

    在 C++ 中它是 char

    这种差异可能会导致某些同时编译为 C 和 C++ 的代码出现不一致的行为。

    memset(&i, 'a', sizeof('a'));   // Questionable code 
    

    【讨论】:

    • 常量的值不决定它的类型。 '3' 可能是 char 类型的常量 51,但它不是。
    • 确实做了相应的修改。谢谢。
    猜你喜欢
    • 2020-08-23
    • 2015-10-01
    • 2018-03-05
    • 2013-05-17
    • 1970-01-01
    • 2012-01-29
    • 2018-03-21
    • 2010-12-06
    • 2019-02-19
    相关资源
    最近更新 更多