首页 > 解决方案 > c++:通过引用传递二维数组?

问题描述

我正在回到 C++ 中,并且无法弄清楚如何将 2D 数组传递给函数。下面的代码是我目前的尝试,我已经能够通过使用通过引用传递向量字符串:

vector<string> g_dictionary;
getDictionaryFromFile(g_dictionary, "d.txt");
...
void getDictionaryFromFile(vector<string> &g_dictionary, string fileName){..}

但是当我尝试像下面这样对我的二维数组做同样的事情时,我在“solve_point(boardEx);”这一行得到一个错误。表示 char & 类型的引用不能用 boardEx[5][4] 类型的值初始化

#include <stdio.h>   
#include <string>
using namespace std;

void solve_point(char* &board){ 
    printf("solve_point\n");
    //board[2][2] = 'c';
}

int main(){
    char boardEx[5][4];
    solve_point(boardEx);
}

标签: c++arrayspointersparameter-passing

解决方案


该类型char*&是对指针的引用。“2d”数组衰减为指向数组的指针。

对于您的数组boardEx,它将衰减为char(*)[4]您的函数接受的类型:

void solve_point(char (*board)[4]) { ... }

或者您可以使用模板来推断数组维度

template<size_t M, size_t N>
void solve_point(char (&board)[M][N]) { ... }

或使用std::array

std::array<std::array<char, 5>, 4> boardEx;

...

void solve_point(std::array<std::array<char, 5>, 4> const& board) { ... }

或使用std::vector

std::vector<std::vector<char>> boardEx(5, std::vector<char>(4));

...

void solve_point(std::vector<std::vector<char> const& board) { ... }

考虑到问题的编辑,使用的解决方案std::vector是唯一可能的便携式和标准解决方案。


推荐阅读