c++ - 不能将二维数组传递给 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++ 特性。
您可以通过以下方式声明函数和数组
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];
}
请注意,由于列数是众所周知的,因此将其传递给函数是没有意义的。此外,通过引用传递行数和列数是没有意义的。
推荐阅读
- php - 使用 str_word_count 计算对手单词中的字母
- php - 在php中为每个循环附加变量
- reactjs - IE10 中反应 vendor.js 中的羊皮纸定义无效
- selenium-webdriver - Jmeter - Selenium/Webdriver 支持:HTMLUNIT 驱动程序错误
- java - 如何在 hybris 中隐藏工单状态?
- maven - 将单独的jar文件打包到maven中的war文件
- c++ - codeforces 455A 的意外失败测试用例无聊
- r - 不能使用 geom_col 绘制 POSIXct 对象?
- javascript - 递归推送只添加最后一个元素
- polymorphism - 覆盖 vs 多态 vs 重载