awe*_*ber -2 c++ arrays string
我遇到了一个问题,我需要找到数组的大小来确定数组的长度。我的理解是一个字符是 1 个字节,一个字符串是 2 个字节('\0'字符的额外字节)。
但是,我发现字符串数组的单个元素是 24 个字节。
我输出了一个字符串、字符和整数变量的大小来验证我的理解。我对 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;
}
Run Code Online (Sandbox Code Playgroud)
预期成绩:
2
2
2
1
1
1
4
4
4
Run Code Online (Sandbox Code Playgroud)
实际结果:
2
24
24
1
1
1
4
4
4
Run Code Online (Sandbox Code Playgroud)
为什么 sizeof array(type string) 是 24 字节,只有一个空格元素?
因为std::string对象的大小是 24 字节(在您的系统上)。
我的理解是一个字符是 1 个字节
正确的。
一个字符串是 2 个字节(\0 字符的额外字节)。
2 个char对象的数组确实是 2 个字节。
但是,我发现字符串数组的单个元素是 24 个字节。
您似乎将“字符串”一词的不同含义混为一谈。虽然字符串确实是一个字符数组,std::string但不仅仅是一个字符数组。相反,std::string是一个表示字符串的类。
更具体地说,std::string是一个管理动态分配的字符数组的类。因此,字符串的大小必须至少是指向已分配内存的指针的大小。