如何初始化此指针数组

How do I initialize this array of pointers?

本文关键字:指针 数组 初始化      更新时间:2023-10-16

我真的不确定它是什么(如果它是指针数组,还是指针数组??),但当我通过调试器踩到它时,它会给我0xCDCDCD,这意味着内存已分配,但未初始化。有人能告诉我如何初始化它吗?

谢谢。

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'

首先,您需要使用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++中编写这样的代码。总有更好的方法来做你想做的事情(通常涉及容器和智能指针)。

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

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

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

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

但说真的,如果你开始写这样的东西,不管你在服用什么药物,要么多吃,要么少吃。

double (vars)[4];只声明了一个4个double的数组。(可选的括号只是令人困惑)。如果您想要一个由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];