在函数中制作一个2d数组



我有点拘泥于我的学校项目。所以我需要做一个动态的二维数组。它必须在一个有3个参数的函数中创建:二维字符数组、长度和宽度。这就是我到目前为止所拥有的。长度和宽度来自另一个函数,这没有问题。我觉得我已经很接近了,但我不知道如何将数组保存到theArray[][],是否需要为放置/*what here?*/的位置创建一个新变量。在网上没有找到任何特定的东西(也许我只是不知道该搜索什么(提前感谢!

void doArray(char theArray[][], unsigned int length, unsigned int width) {
char** /*what here?*/ = new char*[lenght];
for(unsigned int i = 0; i < length; i++){
/*what here?*/[i] = new char[width];
}}
int main() {
unsigned int lenght = 0;
unsigned int width = 0;
char theArray[][];
size(lenght, width);
doArray(theArray, lenght, width);}

C++中的二维动态数组是:std::vector<std::vector<TYPE>> a(SIZE_M, std::vector<TYPE>(SIZE_N));

#include <vector>
void doArray(auto &theArray, std::size_t length, std::size_t width) {
theArray = std::vector<std::vector<char>>(length, std::vector<char>(width));
}
int main() {
std::size_t lenght = 0;
std::size_t width = 0;
std::vector<std::vector<char>> theArray;
size(lenght, width);
doArray(theArray, lenght, width);
}

另一种方法是使用malloc。

char **arr;
arr = (char**)malloc(length * sizeof(char*));
for(i=0;i<length;i++){
arr[i]=(char*)malloc(width * sizeof(char));
}

它是重复的。请参阅此处以获得更好的解释。

不管怎样,这就是你想要的:

void doArray(char **theArray, unsigned int length, unsigned int width) {
theArray = new char*[length];
for(unsigned int i = 0; i < length; ++i)
theArray[i] = new char[width];
}

请不要评论我应该使用size_t而不是unsigned int

当你想让一个函数创建一些东西时,通常的方法是将创建的对象return,而不是将其作为参数传入。我想也许这就是让你困惑的地方。出于某种原因,初学者经常在函数返回事物的想法上遇到麻烦。

因此,重写您的代码以使用返回而不是参数,您将得到这个

char** doArray(unsigned int length, unsigned int width) {
char** arr = new char*[length];
for(unsigned int i = 0; i < length; i++) {
arr[i] = new char[width];
}
return arr;
}

然后主要调用类似的函数

int main() {
char** theArray;
...
theArray = doArray(length, width);

正如其他人所指出的,在C++中,正确的方法是使用向量。但无论哪种方式,关于编写函数以返回值的课程都适用。

最新更新