好的,请考虑以下代码:
char** pool = new char*[2];
pool[0] = new char[sizeof(char)*5];
据我所知,这会创建一个指向2个char指针数组的指针。然后第二行将这两个char指针中的第一个设置为5个字符数组中的第一个项目。如果我错了,请纠正我。
如果我没错:
答案 0 :(得分:2)
据我所知,这会创建一个指向2个char指针数组的指针。 [...]
char** pool = new char*[2];
不,该行创建指向字符指针的指针。右侧的表达式创建一个包含2个字符指针的数组。你可以用一个指针数组初始化这个双指针,因为右边会衰变成一个双指针。
然后第二行将这两个char指针中的第一个设置为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;