我将如何在函数中传递2D数组。我从键盘输入,但是当我将它传递给函数时,它不起作用。
例如
#include<bits/stdc++.h>
using namespace std;
void printGrid(int M, int N, int arr[][N])
{
for(int i=0; i<M; i++)
{
for(int j=0; j<N; j++)
{
printf("%d ",arr[i][j]);
}
printf("\n");
}
}
int main()
{
int M,N;
scanf("%d %d",&M,&N);
int arr[M][N];
printGrid(M,N,arr);
return 0;
}
此解决方案无效。它说N
在这个范围内未被宣布。
有没有办法在函数中使用2D数组?
答案 0 :(得分:3)
您正在以错误的方式编译代码。 int arr[][N]
是可变长度数组(VLA)。这是1999年在C语言中引入的一个功能。如果您使用的编译器比它早,或者您使用的是C ++编译器,则会出现所描述的错误。
确保使用符合标准的C编译器编译代码!您需要使用支持C99标准或更高版本的编译器。例如,您可以使用GCC编译器版本5.x.或者,如果您使用该编译器的旧版本,请设置编译器选项gcc -std=c99
。
答案 1 :(得分:0)
为什么不尝试这样的事情:
#include <iostream>
#include <vector>
using namespace std;
void print(const vector<vector<int>>& arr) {
for(auto& subArr : arr) {
for(auto& element : subArr) {
cout << element << ' ';
}
cout << '\n';
}
}
int main() {
int M,N;
cin >> M >> N;
vector<vector<int>> arr(M, vector<int>(N));
print(arr);
}
这段代码并没有做太多 - 它只是将2D数组初始化为零并打印它 - 但这不是重点。它显示了一些技术,如果您使用现代C ++进行编码,则应该使用这些技术。此外,它解决了在这种情况下打印2D数组的问题,实现为矢量矢量。
我建议您阅读std::vector
:cppreference.com - std::vector
答案 2 :(得分:-2)
解决我的问题...... 谢谢你们回复..
#include<stdio.h>
#define MAX 500
int arr[MAX][MAX];
void printGrid(int M, int N)
{
for(int i=0; i<M; i++)
{
for(int j=0; j<N; j++)
{
printf("%d ",arr[i][j]);
}
printf("\n");
}
}
int main()
{
int M,N;
scanf("%d %d",&M,&N);
printGrid(M,N);
return 0;
}
此代码可以解决您为数组提供的限制