c ++ sizeof(array)返回数组声明长度的两倍

Bro*_*ias 1 c++ sizeof

我有一段代码,其中声明了两个数组,大小为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);
}
Run Code Online (Sandbox Code Playgroud)

Mat*_*ine 10

sizeof返回变量的大小(在本例中sizeof(char)为数组),其中为1.由于a char是一个字节宽,因此sizeof返回变量的大小(以字节为单位).由于系统上每个short int都是两个字节宽,因此其中6个数组的大小为12,而13个数组的大小为26.


Joh*_*ica 6

sizeof返回以字节为单位的大小,对于数组,它是项目数×每个项目的大小.获取项目数除以一个元素的大小.

sizeof(races) / sizeof(races[0])
Run Code Online (Sandbox Code Playgroud)

小心这个.它仅适用于编译时已知大小的数组.这不起作用:

void func(short int array[])
{
    // DOES NOT WORK
    size_t size = sizeof(array) / sizeof(array[0]);
}
Run Code Online (Sandbox Code Playgroud)

array实际上是一个short int *并且sizeof(array)不返回数组的实际大小,这在编译时是未知的.

这是在C++中首选std::vectorstd::array使用原始数组的众多原因之一.

  • @ slavik262 OP可以省略显式的`6`和`13`,这个技巧仍然有用. (2认同)