c++ - 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);
}
解决方案
该类型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
是唯一可能的便携式和标准解决方案。
推荐阅读
- mysql - Mysql 中的光标在 Mysql 5.57 中不起作用
- c - 在读取 txt 文件时尝试跳过“\n”时出现问题
- python - Dask 多处理
- c# - 是否可以使用依赖注入编写真正的单元测试而不是模拟 Web API 控制器的单元测试?
- git - 将本地主分支合并到远程子分支
- ios - 警报视图中的 present() 方法显示错误
- blazor - 从 Blazor 客户端访问 IdentityUser
- django - 在 nginx-ingress 后面的 aks 上托管 django
- css - 使用 renderPlot() 删除 R Shiny ggplot 中 geom_sf() 对象周围的白边距
- javascript - React Native 版本不匹配。无法在 Android Studio 中生成构建,但通过 VS 代码 react-native run-android 正常运行