为什么数组(字符串类型)的大小是 24 字节,带有单个空格元素

Why is sizeof array(type string) 24 bytes with a single space element?

本文关键字:字节 元素 空格 单个 字符串 数组 类型 为什么      更新时间:2023-10-16

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

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

我输出了一个字符串、char 和 int 变量的大小来验证我的理解。我对 int、char 和字符串数组的单个元素做了同样的事情。

#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

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

因为 std::string 对象的大小为 24 字节(在您的系统上(。

我的理解是字符是 1 个字节

正确。

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

一个包含 2 个char对象的数组实际上是 2 个字节。

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

您似乎将"字符串">一词的不同含义混为一谈。虽然字符串确实是一个字符数组,但std::string不仅仅是一个字符数组。相反,std::string是一个表示字符串的类。

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