注意你的代码,
int* myName[5];
声明一个包含 5 个值的数组,每个值都是“指向 int 的指针”,这就是您所要求的。
不过,这是 C++,仅此而已。作为一名 Python 脚本编写者,这可能会给您带来一些惊喜。
它不会给这 5 个指针中的任何一个提供合理的值,也不会为它们创建任何整数来指向。
如果你把它放在一个函数体中,那么它会在堆栈上创建数组。这意味着当当前作用域结束时数组将不复存在(简单地说,这意味着当你到达封闭的闭卷曲时,例如 return 就可以了)。所以特别是下面的代码是不好的:
int **myFunction() {
int *myArray[5];
return myArray;
} // <-- end of scope, and return takes us out of it
它可能会编译,但函数返回一个指针,指向调用者看到它时不再存在的东西。这导致了我们所说的“未定义行为”。
如果您希望数组存在于创建它的函数之外,您可以在每次调用函数时在堆上创建一个,并返回一个指针,如下所示:
int **myFunction() {
int **myArray = new int[5];
return myArray;
}
该函数每次调用都会返回一个不同的数组。当调用者完成它时,它应该销毁数组,如下所示:
delete[] myArray;
否则它将永远不会被释放,并且将永远耗尽内存(或者当您的程序在大多数操作系统上退出时)。
或者,您可以使用关键字“静态”创建具有“全局存储持续时间”的数组(意味着只要程序运行它就存在,但每次只有一个而不是一个新的) .这意味着该函数每次调用时都返回相同的数组。调用者可以在其中存储一些指针,忘记它,再次调用该函数,并看到相同的指针仍然存在:
int **myFunction() {
static int *myArray[5];
return myArray;
}
请注意这段代码与之前非常糟糕的代码有多么相似。
最后,如果你只是想创建一个整数数组,而不是一个指向整数的指针数组,你可以这样做:
int myArray[5] = { 1, 2, 3, 4, 5};
这实际上创建了 5 个整数(意思是,它分配了可以存储整数值本身的空间。这与指针数组不同,指针数组存储用于存储整数值的空间地址)。
它还在该空间中存储指定的值:myArray[0] 现在为 1,myArray[1] 为 2,等等。