声明并初始化指针到指针的char-array

Declaration and initialize pointer-to-pointer char-array

本文关键字:指针 char-array 声明 初始化      更新时间:2023-10-16

关于指针指向指针,我想知道以下内容是否ok:

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

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

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

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

是的,看起来很合适,

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()对数组执行此操作。

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

还不需要初始化它们。只要在读取字符之前初始化它们,它就是正确的。

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

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