为什么sizeof array(type string)24个字节只有一个空格元素?

时间:2019-04-30 20:30:59

标签: c++ arrays string

我遇到了一个问题,我需要找到一个数组的大小来确定数组的长度。我的理解是char是1字节,字符串是2字节(\ 0字符的额外字节)。

但是,我发现字符串数组的单个元素为24个字节。

我输出了一个字符串,char和int变量的大小来验证我的理解。我对int,char和string数组的单个元素做了相同的操作。


#include <iostream>

using namespace std;


int main()
{
    string strArr[1] = {" "};

    cout
        << sizeof " " << endl
        << sizeof strArr[0] << endl
        << sizeof strArr << endl << endl;

    char charArr[1] = {'a'};

    cout
    << sizeof 'a' << endl
    << sizeof charArr[0] << endl
    << sizeof charArr << endl << endl;

    int intArr[1] = {1};

    cout
        << sizeof 1 << endl
        << sizeof intArr[0] << endl
        << sizeof intArr << endl;

    return 0;
}

预期结果:

2

2

2

1

1

1

4

4

4

实际结果:

2

24

24

1

1

1

4

4

4

1 个答案:

答案 0 :(得分:4)

  

为什么sizeof数组(类型字符串)为24个字节并带有单个空格元素?

由于std::string对象的大小为24个字节(在您的系统上)。

  

我的理解是char是1个字节

正确。

  

字符串是2个字节(\ 0字符的额外字节)。

由2个char对象组成的数组的确是2个字节。

  

但是,我发现字符串数组的单个元素为24个字节。

您似乎正在混淆“字符串” 一词的不同含义。虽然字符串确实是一个字符数组,但是std::string不仅仅是一个字符数组。相反,std::string是代表字符串的类。

更具体地说,std::string是管理动态分配的字符数组的类。因此,字符串的大小必须至少是指向分配的内存的指针的大小。