2

好的,请考虑以下代码:

char** pool = new char*[2];
pool[0] = new char[sizeof(char)*5];

据我所知,这会创建一个指向 2 个字符指针数组的指针。然后第二行将这 2 个字符指针中的第一个设置为 5 个字符数组中的第一项。如果我错了,请纠正我。

如果我没记错的话:

  1. 我将如何初始化所有这些字符?
  2. 我将如何更改特定的字符?例如,将每个数组中的最后一个字符设置为 NULL。
4

1 回答 1

2

据我所知,这会创建一个指向 2 个字符指针数组的指针。[...]

char** pool = new char*[2];

不,那行创建了一个指向一个字符的指针。右侧的表达式创建了一个包含 2 个字符指针的数组。你可以用一个指针数组来初始化这个双指针,因为右边会衰减成一个双指针。

然后第二行将这 2 个字符指针中的第一个设置为 5 个字符数组中的第一项。[...]

pool[0] = new char[sizeof(char)*5];

“这两个 char 指针中的第一个”是什么意思。您只分配给该行上的一个指针。

我将如何初始化所有这些字符?

通过使用循环遍历指针并为它们分配有效内存。

我将如何更改特定的字符?例如,将NULL每个数组中的最后一个字符设置为。

for (char** p = pool; p != (pool + 2); ++p)
{
    *p = new char[/* amount of chars */];
    (*p)[/* amount of chars */] = '\0';
}

但这完全是一团糟。使用字符串向量会容易得多:

std::vector<std::string> pool;
于 2014-01-25T22:20:59.827 回答