C++ 为什么C+中的字符串数组中的每个字符串+;有同样大小的吗?

C++ 为什么C+中的字符串数组中的每个字符串+;有同样大小的吗?,c++,string,sizeof,C++,String,Sizeof,我有一个字符串数组,我想知道每个组成字符串的长度。所有字符串的长度不同,但编译器显示所有字符串的大小相同。任何人都能解释为什么会这样? 代码如下: string arr[] = {"ACACACZCZCZC", "LOQWABCB", "PTUTCFEBC"}; int n = sizeof(arr)/sizeof(arr[0]); cout<<"number of strings is "<<n<<endl; cout<<"individual

我有一个字符串数组,我想知道每个组成字符串的长度。所有字符串的长度不同,但编译器显示所有字符串的大小相同。任何人都能解释为什么会这样? 代码如下:

string arr[] = {"ACACACZCZCZC", "LOQWABCB", "PTUTCFEBC"};
int n = sizeof(arr)/sizeof(arr[0]);
cout<<"number of strings is "<<n<<endl;
cout<<"individual size of strings: str1 = "<<sizeof(arr[0])<<", str2 = "<<sizeof(arr[1])<<", str3 = "<<sizeof(arr[2])<<endl;
字符串arr[]={“acacacazczc”、“LOQWABCB”、“PTUTCFEBC”};
int n=sizeof(arr)/sizeof(arr[0]);
cout
sizeof(arr[0])
根据对象的静态类型提供对象的大小(以字节为单位)

如果您想知道对象所持有字符串的长度,请使用,如
arr[0].size()

sizeof(x)
提供对象的大小
x
。这与对象可能管理的资源的大小无关。所有这些都告诉您一个
std::string
对象由8个字节组成;很可能是两个指针

如果要了解字符串的长度,请使用字符串的:


sizeof T
是一个编译时可计算运算符,返回类型
T
的大小(以字节为单位)


它不返回
std::string
中包含的字符串的长度。如果您想要,那么使用
size()
length()

如果您实际在每个字符串中查找字符数,那么您确定不需要
arr[0].length()
arr[0].size()
吗?您也可以使用@CoryKramer我尝试过,现在它显示了它们的可变长度。谢谢但是为什么所有字符串在这里占用相同的空间(8字节)。较大的字符串不应该占用更多的空间吗?这里有什么想法吗?请阅读上面的帖子。
std::string
的大小不直接包括底层字符数组的大小,而只是指向该数组的指针。但即使将任何字符串的长度增加到40,它仍然显示为8。如果长度增加了,它不应该增加吗?因为它现在占用了更多的空间。
std::string
结构可能有一个指向数据缓冲区的指针,指针的大小并不取决于它所指向的缓冲区。@AnkitGupta:如果你发现这个答案是最有用的,不要忘记接受它(当然,是的)。
arr[0].size()