二维数组传入没有全局定义 (M x N) 的函数

2D array pass in a function without Define (M x N) globally

本文关键字:函数 定义 全局 二维数组      更新时间:2023-10-16

我将如何在函数中传递 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;
}

此代码适用于您为数组提供的限制