我编写了一个简单的程序,以了解标准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。此外,如果增加/减少数组的第一个元素中包含的字符数,则其大小不会改变。显然,我错了。如果有人可以向我解释此功能,我将不胜感激。谢谢,
我编写了一个简单的程序,以了解标准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个。
| 归档时间: |
|
| 查看次数: |
112 次 |
| 最近记录: |