声明并初始化指向指针的char数组

时间:2014-05-12 10:05:16

标签: c++ initialization pointer-to-pointer

关于指向指针的指针,我想知道它是否可以使用以下内容:

    char** _charPp = new char*[10];

     for (int i = 0; i < 10; i++)
    ´   _charPp[i] = new char[100];

那就是 - 如果我想指向指向10个char数组的指针。

问题 - 现在这样可以,还是我必须对每个char数组进行某种初始化?然后 - 我该怎么做?

我稍后会在程序中用某些字符填充这些数组,但我怀疑数组应该先用值初始化,例如&#34; 0&#34;

2 个答案:

答案 0 :(得分:2)

是的,它看起来非常合适,

int arraySizeX = 100;
int arraySizeY = 100;
char** array2d = new char*[arraySizeX] // you've just allocated memory that
                                       // holds 100 * 4 (average) bytes
for(int i = 0; i < arraySizeX; ++i)
{
    array2d[i] = new char[arraySizeY] // you've just allocated a chunk that 
                                       //holds 100 char values. It is 100 * 1 (average) bytes
    memset(array2d[i], 0, arraySizeY) // to make every element NULL
}
  

我稍后会在程序中用某些字符填充这些数组   但我怀疑数组应该先用值初始化   例如&#34; 0&#34;

不,没有&#34;默认值&#34;在C ++中。您需要为指针指定0以使其为空,或使用memset()将其与数组一起使用。

答案 1 :(得分:1)

Netherwire的答案正确显示了如何将字符初始化为0。我将解决你问题的第一部分。

无需初始化它们。只要你在阅读之前初始化字符,这是正确的。

根据代码的结构以及如何使用数组,无论如何都可能更安全,因为如果最终在初始化之前读取其中的一些内容,则很难找到错误。

另外,请记住稍后delete[]您已分配的阵列。或者更好的是,请考虑使用std::vector代替(std::string,具体取决于您使用这些数组的内容。)