首页 > 解决方案 > 不能将二维数组传递给 C++ 中的函数

问题描述

我正在关注有关此主题的互联网教程,但我遇到以下情况:

我有一个具有以下签名的函数:

void func(long& rows, long& columns, int array[][columns]);

我正在尝试使用这样的功能:

int matrix[5][4] = {0,  -1,  2,  -3,
                    4,  -5,  6,  -7,
                    8,  -9,  10, -11,
                    12, -13, 14, -15,
                    16, -17, 18, -19};

long rows = 5;
long columns = 4;

func(rows, columns, matrix);
^--- 'No matching function for call to 'func''

问题是什么?为什么不能调用函数?

标签: c++arrayspointersmultidimensional-array

解决方案


可变长度数组不是标准的 C++ 特性。

您可以通过以下方式声明函数和数组

const size_t columns = 4;

void func( size_t rows, const int array[][columns]);

//...


int matrix[][columns] = { {  0,  -1,   2,  -3 },
                          {  4,  -5,   6,  -7 },
                          {  8,  -9,  10, -11 },
                          { 12, -13,  14, -15 },
                          { 16, -17,  18, -19 } };

func( sizeof( matrix ) / sizeof( *matrix ),  matrix);

//...

void func( size_t rows, const int array[][columns] )
{
    std::cout << rows << columns << array[0][1];
}

请注意,由于列数是众所周知的,因此将其传递给函数是没有意义的。此外,通过引用传递行数和列数是没有意义的。


推荐阅读