9

我写了一个小的 printf 语句,它在 C 和 C++ 中的工作方式不同:

    int i;
    printf ("%d %d %d %d %d \n", sizeof(i), sizeof('A'), sizeof(sizeof('A')),    sizeof(float), sizeof(3.14));

上述程序在 c 中使用 gcc 编译器的输出是 4 4 8 4 8

上述程序在 c++ 中使用 g++ 编译器的输出是 4 1 8 4 8

我预计 4 1 4 4 8 在 c。但结果并非如此。

printf sizeof(sizeof('A')) 中的第三个参数是 8

谁能给我这个的理由

4

3 回答 3

14

这与运营商无关sizeof;相反,C 中字符文字的大小与 C++ 不同,因为 C 中的字符文字是 type int,而在 C++ 中它们是 type char

请参阅为什么 C 字符文字是整数而不是字符?了解更多信息。

于 2013-04-12T04:12:59.870 回答
3

是的,它是特定于实现的。sizeof()返回size_t无符号整数。它的大小取决于机器(32 位与 64 位)以及实现。

于 2013-04-12T04:15:03.580 回答
2

C/C++ 中字符大小 ('a') 中所述

在 C 中,char是一个字节,但它'a'是一个int常量(在您的情况下,取决于您编译的架构!)四个字节宽。在 C++ 中,两者char'a'都是char一个字节大小。

最重要的信息是C++ 不是 C 的超集。它有很多像这样的小的突破性变化。

于 2013-04-12T04:12:47.483 回答