如何将2D数组(矩阵)传递给函数?

时间:2018-08-12 04:33:52

标签: c++ arrays

这回到了基础,但是由于某些原因,Visual Studio一直给我一个错误。我的函数参数有问题。

我在做什么错?我输入了矩阵的尺寸(NxN),但我一定缺少一些东西。

这些是它给我带来的错误,不仅使您感到困惑,而且使他们更加困惑:

一个数组可能没有这种类型的元素(函数参数)

'matrix'缺少下标(函数参数)

'void print(const int,char [] [])':无法将参数2从'char [3] [3]'转换为'char [] []'(我在main中调用函数)< / p>

// Function that has problems
void print(const int size, char matrix[][]) {
    for (int i = 0; i < size; i++) {
        for (int j = 0; j < size; j++) {
            cout << matrix[i][j];
        }
        cout << endl;
    }

    return;
}

// MAIN
int main() {
    const int n = 3;
    char matrix[n][n] = {'a', 'b', 'c',
                         'h', 'i', 'd', 
                         'g', 'f', 'e'};

    print(n, matrix); // Calling function here

    return 0;
}

1 个答案:

答案 0 :(得分:2)

clang说:#1 x86-64 gcc(trunk):2:42:错误:声明“矩阵”为多维数组时,除第一个-Godbolt.org/g/qgnHTy之外,所有维度的边界都必须有边界>

请记住,为了进行array2d [i] [j]查找,它必须能够以i * length + j的方式访问元素,但是编译器不知道矩阵的长度是因为您没有把它放在类型中。编译器不知道size参数是否相关。

#include <iostream>

using namespace std;

// Function that has problems
template<int size> 
void print(char matrix[][size]) {
    for (int i = 0; i < size; i++) {
        for (int j = 0; j < size; j++) {
            cout << matrix[i][j];
        }
        cout << endl;
    }

    return;
}

// MAIN
int main() {
    constexpr int n = 3;
    char matrix[n][n] = {'a', 'b', 'c',
                         'h', 'i', 'd', 
                         'g', 'f', 'e'};

    print<n>(matrix); // Calling function here

    return 0;
}

实时:https://godbolt.org/g/YWDgk5