【发布时间】:2021-05-08 09:03:04
【问题描述】:
要访问数组中的任何随机索引,我们访问以下内存位置:
a[i] = 基地址 + (data_type 的大小) * i
这就是数组只有相同类型数据的原因。
现在,当我们使用 int、char 等原始数据类型时,这可以正常工作。
但是,假设我有一个字符串数组,其中每个字符串的大小不同:
string a[] = {"xyz", "abcde", "qwerty"}
这在内存中是如何工作的?由于每个字符串占用不同的内存,这在内部如何工作?
编辑:
得到了字符串的答案。字符串在内部具有恒定的大小,因此可以解决。
假设向量数组会发生什么:
vector<int> v[5];
它们内部是否也有一个恒定的大小?
【问题讨论】:
-
作为
std::string实例?!?我不明白你的问题?如果要确定字符串大小,就得用std::string::size(),sizeof(std::string)是常数。 -
@Varum 我会说字符串内存布局取决于实现,但您通常应该有 15 个字节(对于短字符串实现)加上一个指针(对于更大的字符串)。所以一个 std::string 数组将是一个固定大小、连续的字符串数组(在我的示例中,每个 15 个字节加上指针的大小,通常是 4 个字节)。