如何初始化这个指针数组?

时间:2012-03-15 21:15:51

标签: c++ arrays pointers initialization

我真的不确定它是什么(如果它是一个指针数组,或指针数组的数组???),但当我通过调试器踩到它时,它给我0xCDCDCDCD,意味着内存被分配,但没有初始化。谁能告诉我如何初始化它?

感谢。

char* (*vars)[4];

我尝试过这样的东西,但它会产生编译错误:

for (int i = 0; i < 4; i++)
    vars[i] = new char*[new char*][4]; // error C2440: 'initializing' : cannot convert from 'char **' to 'unsigned int'

3 个答案:

答案 0 :(得分:7)

首先,您需要使用cdecl

  

将vars声明为指向char

指针的数组4的指针

如何初始化取决于您的目标。但是,例如:

// Create a new array
vars = new (char *[1][4]);
// Each element of the array in turn points to an array
for (int i = 0; i < 4; i++) {
    (*vars)[i] = new char[27];
}

...

// Cleanup
for (int i = 0; i < 4; i++) {
    delete [] (*vars)[i];
}
delete [] vars;

最后,你永远不应该在C ++中编写这样的代码。总是有更好的方法来做你想要做的事情(通常涉及容器和智能指针)。

答案 1 :(得分:2)

vars是一个指向char的4个指针数组的指针。

你不能在C ++中嵌套索引new,所以你可以这样做:

vars = new (char*)[4];
for(int i=0; i<4; i++) {
     (*vars)[i] = ...;
}

循环的内部部分,该数组中指针的初始化,它在很大程度上取决于程序的其余部分。

但严重的是,如果你开始写这样的东西,无论你服用什么药,都要多服用或少服用。

答案 2 :(得分:0)

double (vars)[4];只声明一个包含4个双打的数组。 (可选括号只是令人困惑)。如果你想要一个包含4个字符串的数组,请使用char *((vars)[4]);(好的,我用括号括起来了。)然后你可以将它们初始化为null,或者分配新的字符串,或者将它们指向预分配的内存。

char *vars[4];
for (int i = 0; i < 4; i++)
    vars[i] = new char[I_HOPE_THIS_IS_BIG_ENOUGH];