【发布时间】:2012-11-02 18:27:22
【问题描述】:
我有一段代码声明了两个数组,其大小分别为 6 和 13,但是当使用 'sizeof()' 时,长度返回为 12 和 26。
#include <iostream>
using namespace std;
int main(){
enum charRaces {DWARF,ELF,GNOME,HALFELF,HALFLING,HUMAN};
enum classes{WARRIOR,FIGHTER,RANGER,PALADIN,WIZARD,MAGE,ILLUSIONIST,PRIEST,CLERIC,DRUID,ROGUE,THEIF,BARD};
short int races[6] = {DWARF,ELF,GNOME,HALFELF,HALFLING,HUMAN};
short int classes[13] = {WARRIOR,FIGHTER,RANGER,PALADIN,WIZARD,MAGE,ILLUSIONIST,PRIEST,CLERIC,DRUID,ROGUE,THEIF,BARD};
cout << "sizeof(races)\t" << sizeof(races) << endl;
cout << "sizeof(classes)\t" << sizeof(classes) << endl;
system("pause");
return(0);
}
【问题讨论】:
-
在您听取了以下每个人的建议并使用
sizeof(array_var)/sizeof(array_var[0])之后,请记住,当您将 array_var 替换为 pointer_var 时,它不起作用。如果这听起来让您感到困惑,我建议您阅读更多关于数组、指针以及它们之间的区别的内容。 -
看看你在做什么:你声明了两个数组,一个有 6 个项目,一个有 13 个项目。然后在这些数组上调用 sizeof,可以预见的是,它返回数组中元素的数量乘以每个元素的大小。由于您将数组声明为
short int,在您的平台上,每个数组都是 16 位(或 2 个字节),编译器正确地返回 12(或 2 * 6)和 26(或 2 * 13)字节的比赛和类分别。