0

关于指向指针的指针,我想知道以下是否可以:

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

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

也就是说 - 如果我想要一个指向指向 10 个字符数组的指针的指针。

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

我稍后会在程序中用某些字符填充这些数组,但我怀疑这些数组应该用之前的值初始化,例如“0”

4

2 回答 2

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
}

我稍后会在程序中用某些字符填充这些数组,但我怀疑这些数组应该用之前的值初始化,例如“0”

不,C++ 中没有“默认值”。您需要将 0 分配给指针以使其为空,或使用 memset() 对数组执行此操作。

于 2014-05-12T10:20:45.690 回答
1

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

目前还不需要初始化它们。只要您在读取字符之前对其进行初始化,就可以了。

根据你的代码结构和你使用数组的方式,这样做可能更安全,因为如果你最终在初始化之前阅读了其中的一些,可能很难找到错误。

另外,请记住稍后delete[]分配的数组。或者更好的是,考虑std::vector改用(可能std::string取决于您使用这些数组的目的。)

于 2014-05-12T10:43:26.050 回答