首页 > 解决方案 > 如何将二维数组(矩阵)传递给函数?

问题描述

这回到了基础,但出于某种原因,Visual Studio 不断给我一个错误。我的函数参数有问题。

我究竟做错了什么?我传入了矩阵的维度(NxN),但我一定遗漏了一些东西。

这些是它给我的错误,它使我感到困惑而不是澄清:

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

“矩阵”缺少下标(函数参数)

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

// 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;
}

标签: c++arrays

解决方案


clang 说:#1 与 x86-64 gcc(主干):2:42:错误:将“矩阵”声明为多维数组必须具有除第一个维度之外的所有维度的边界 - godbolt.org/g/qgnHTy

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

#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


推荐阅读