二维数组传入没有全局定义 (M x N) 的函数
2D array pass in a function without Define (M x N) globally
我将如何在函数中传递 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 数组吗?
你以错误的方式编译代码。 int arr[][N]
是一个可变长度数组 (VLA)。这是 1999 年在 C 语言中引入的功能。如果您使用的编译器比该版本旧,或者如果您使用C++编译器,则会收到所描述的错误。
确保使用符合标准的 C 编译器编译代码!您需要使用支持 C99 标准或更高版本的编译器。例如,您可以使用 GCC 编译器版本 5.x。或者,如果您使用该编译器的旧版本,请将编译器选项设置为 gcc -std=c99
。
你为什么不尝试这样的事情:
#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
解决我的问题...谢谢你们的回复..
#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;
}
此代码适用于您为数组提供的限制
相关文章:
- 不同翻译单元中不可重载的非内联函数定义
- Visual Studio中的函数声明和函数定义问题
- 编写代码时C++出现错误:错误 1 错误 C2601:'circle':本地函数定义是非法的
- 具有enable_if外部类原型的模板类构造函数定义
- 类的前向声明之后的类成员函数定义,在类声明之前
- 为函数定义符号不明确的指针参数
- C++模板专用化 - 无法匹配函数定义
- 错误:在第 6 行'{'标记之前,此处不允许使用函数定义
- 找不到 #define 的函数定义
- 根据类型特征更改函数定义?
- 将抽象基类中的所有纯虚函数定义为 varaidaic 模板
- 命名空间更改函数定义
- "Type&"与C++函数定义中的"Type*"
- C++:为什么允许在另一个函数中声明函数,而不允许在函数定义中声明?
- 如何从 C++ 中的现有模板函数定义新函数
- 私有在函数定义/实现的返回值范围内是什么意思 (c++)?
- 越界成员函数定义是否需要一个完全限定的类名,直到全局范围
- 为什么c++允许成员函数定义中实例的私有成员访问
- Qt基类函数定义
- C++函数定义中参数列表后面额外一对括号的含义