gpt4 book ai didi

c++ - 输入二维数组的大小

转载 作者:行者123 更新时间:2023-11-30 04:22:00 26 4
gpt4 key购买 nike

在我的代码中,我输入了两个维度的大小,然后声明了一个二维数组。我的问题是,如何将该数组用作函数参数?我知道我需要在函数规范中写入列数,但如何传递列数?

 void gameDisplay(gameCell p[][int &col],int a,int b) {
for(int i=0;i<a;i++) {
for(int j=0;j<b;j++) {
if(p[i][j].getStat()==closed)cout<<"C ";
if(p[i][j].getStat()==secure)cout<<"S ";
if(p[i][j].getBomb()==true&&p[i][j].getStat()==open)cout<<"% ";
if(p[i][j].getBomb()==false&&p[i][j].getStat()==open) {
if(p[i][j].getNum()==0)cout<<"0 ";
else cout<<p[i][j].getNum()<<" ";
}
cout<<endl;
}
}
}

int main() {
int row,col,m;
cout<<"Rows: ";cin>>row;cout<<"Columns: ";cin>>col;
m=row*col;
gameCell p[row][col];
gameConstruct(p[][col],m);
gameDisplay(p[][col],row,col);
}

我试过这种方法,但它不起作用。

谢谢。

最佳答案

在 C++ 中,您不能拥有可变长度数组。也就是说,您不能采用输入整数并将其用作数组的大小,如下所示:

std::cin >> x;
int array[x];

(这将在 gcc 中工作,但它是一个不可移植的扩展)

当然,也可以做类似的事情。允许您拥有动态大小数组的语言功能是使用 new[] 进行动态分配。你可以这样做:

std::cin >> x;
int* array = new int[x];

但是请注意,这里的array 不是数组类型。它是一个指针类型。如果你想动态分配一个二维数组,你必须这样做:

std::cin >> x >> y;
int** array = new int*[x]; // First allocate an array of pointers
for (int i = 0; i < x; i++) {
array[i] = new int[y]; // Allocate each row of the 2D array
}

但是,这仍然不是数组类型。它现在是一个 int**,或“指向 int 的指针”。如果你想把它传递给一个函数,你需要函数的参数是 int**。例如:

void func(int**);
func(array);

这样就好了。但是,您几乎总是需要知道函数内部数组的维数。你怎么能那样做?只需将它们作为额外参数传递即可!

void func(int**, int, int);
func(array, x, y);

这当然是一种方法,但肯定不是惯用的 C++ 方法。它存在安全问题,因为很容易忘记删除所有内容。您必须手动管理内存分配。您必须这样做以避免内存泄漏:

for (int i = 0; i < x; i++) {
delete[] array[i];
}
delete[] array;

所以忘记我刚刚告诉你的一切吧。使用标准库容器。您可以轻松地使用 std::vector 而不必担心传递维度:

void func(std::vector<std::vector<int>>);

std::cin >> x >> y;
std::vector<std::vector<int>> vec(x, std::vector<int>(y));
func(vec);

如果您最终处理数组类型而不是动态分配数组,那么您可以通过定义一个引用数组的模板函数来获取数组的维度:

template <int N, int M>
void func(int (&array)[N][M]);

该函数将为传递给它的所有不同大小的数组实例化。模板参数(数组的维度)必须在编译时已知。

关于c++ - 输入二维数组的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14031816/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com