2D数组在没有全局定义(M x N)的函数中传递

时间:2017-10-17 11:34:50

标签: c++ arrays algorithm

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

3 个答案:

答案 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::vectorcppreference.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;
}

此代码可以解决您为数组提供的限制