好的,请考虑以下代码:
char** pool = new char*[2];
pool[0] = new char[sizeof(char)*5];
据我所知,这会创建一个指向 2 个字符指针数组的指针。然后第二行将这 2 个字符指针中的第一个设置为 5 个字符数组中的第一项。如果我错了,请纠正我。
如果我没记错的话:
- 我将如何初始化所有这些字符?
- 我将如何更改特定的字符?例如,将每个数组中的最后一个字符设置为 NULL。
好的,请考虑以下代码:
char** pool = new char*[2];
pool[0] = new char[sizeof(char)*5];
据我所知,这会创建一个指向 2 个字符指针数组的指针。然后第二行将这 2 个字符指针中的第一个设置为 5 个字符数组中的第一项。如果我错了,请纠正我。
如果我没记错的话:
据我所知,这会创建一个指向 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;