我有一段代码,其中声明了两个数组,大小为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);
}
Mat*_*ine 10
sizeof返回变量的大小(在本例中sizeof(char)为数组),其中为1.由于a char是一个字节宽,因此sizeof返回变量的大小(以字节为单位).由于系统上每个short int都是两个字节宽,因此其中6个数组的大小为12,而13个数组的大小为26.
sizeof返回以字节为单位的大小,对于数组,它是项目数×每个项目的大小.获取项目数除以一个元素的大小.
sizeof(races) / sizeof(races[0])
小心这个.它仅适用于编译时已知大小的数组.这不起作用:
void func(short int array[])
{
    // DOES NOT WORK
    size_t size = sizeof(array) / sizeof(array[0]);
}
这array实际上是一个short int *并且sizeof(array)不返回数组的实际大小,这在编译时是未知的.
这是在C++中首选std::vector或std::array使用原始数组的众多原因之一.