C ++中sizeof()运算符的功能

Sar*_*ara 0 c++ std sizeof

我编写了一个简单的程序,以了解标准c ++库sizeof()的功能

它遵循:

const char* array[] = {
                          "1234",
                          "5678"
                          };

    std::cout << sizeof(array) << std::endl;//16
    std::cout << sizeof (array[0]) << std::endl;//8

    std::cout << printf("%lu\n",sizeof (char) );//1
    std::cout << printf("%lu\n",sizeof (int) );//24
    std::cout << printf("%lu\n",sizeof (float) );//24
    std::cout << printf("%lu",sizeof (double) );//281
Run Code Online (Sandbox Code Playgroud)

可以通过输出报告看到字符在我的OS中的尺寸为1字节,这是可以预期的。但是我不明白为什么'''array [0]'''的维数是8,因为它包含4个字符,并且对于包含在字符串中的结尾序列“ \ n”至少包含2个字符。因此,我假定数组的第一个元素占用的字节数应为6而不是8。此外,如果增加/减少数组的第一个元素中包含的字符数,则其大小不会改变。显然,我错了。如果有人可以向我解释此功能,我将不胜感激。谢谢,

Bas*_*tch 6

我编写了一个简单的程序,以了解标准c ++库sizeof()的功能。

术语错误。请阅读n3337(一种C ++标准)和有关sizeof的维基页面

sizeof是编译时运算符,而不是 function。如果v是一些变量,sizeof(v)只依赖于类型v,从来没有在它的价值(相比之下,大多数的功能f,价值f(v)取决于值v)。

了解C ++的一种好方法是引用诸如标准之类的文档或有关此的好的网页。

如果有人可以解释我

是。阅读有关C ++的好书。是由C ++的主要设计师编写的。尝试更多,更好地理解C ++ 的(困难)语义。你也可以学习现有的开源C ++编译器,如源代码GCC锵/ LLVM(从而有效地使用的一个免费软件 的自由)。

顺便说一句,您可能会很痛苦地发现C ++实现sizeof(int)为1(例如,对于某些DSP处理器)。在便宜的32位ARM处理器上(例如今天在便宜的手机上;然后您可能会使用一些交叉编译器),或者在一些Raspberry Pis(或也许是大型机)上甚至在2019年可能会达到sizeof(array[0])sizeof(void*)达到4个。