初始化和导航char **

时间:2014-01-25 21:41:51

标签: c++ pointer-to-pointer

好的,请考虑以下代码:

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

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

如果我没错:

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

1 个答案:

答案 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;