如何指向C++数组数组
How to point to an array of arrays in C++?
我有一个 4D 数组,我想创建一个函数,我可以用来引用 4D 数组中的 2D 数组,并通过在函数调用中附加带有索引的方括号来读取其数据。
int numbers[2][3][4][4] = {
{
{{1,2,3,4}, {4,3,2,1}, {6,7,8,9}, {9,8,7,6}},
{{0,1,0,1}, {1,0,1,0}, {1,1,0,0}, {0,0,1,1}},
{{5,4,1,8}, {4,2,5,1}, {7,2,5,8}, {4,2,5,1}}
},
{ /* same stuff */ }
};
例如,如果我想只访问 {4,2,5,1},我可以创建一个函数,返回指向该数组的第一个整数的指针(&number[0][2][1][0]),并使用 func()[1]、func()[2]、func()[3]访问元素,嗯......你知道的。
int* func() {
return &numbers[0][2][1][0];
}
// func()[2] => 5
但是我如何创建一个返回对数字 [0][2] 的引用的函数,例如我可以做func()[1][0]
,它会返回 5?
似乎我应该提高对 C/C++ 指针、引用和数组的理解,但我也会欣赏"std"和 C++11 特定的解决方案(使用一些很酷的 std::class 而不是标准数组)。谢谢:)
-
C++最好的方法是返回对 2D 数组的引用
int (&func())[4][4] { return numbers[0][2]; }
现在您可以访问它
func()[i][j]
这完全保留了 2D 数组类型并保留了自然访问语法。
-
如果您坚持专门返回指针,则可以返回指向该 2D 数组中第一个 1D 数组的指针
int (*func())[4] { return numbers[0][2]; }
这将保留访问语法为
func()[i][j]
但是,如您所见,这样做的代价是从 2D 数组类型衰减到 1D 数组类型。
-
或者,正如已经建议的那样,您可以返回指向 2D 数组的指针
int (*func())[4][4] { return &numbers[0][2]; }
但在这种情况下,您必须记住访问该 2D 数组元素作为
(*func())[i][j]
即它保留了 2D 数组类型,但强制您使用更复杂的访问语法。
出于这个原因,引用似乎是最好的方法(只要你坚持使用原始数组),结合了两种基于指针的方法的"最佳"功能。
附言:类型定义 2D 数组类型将生成更具可读性的函数声明。 例如,如果你这样做
typedef int Numbers2D[4][4];
然后第一个变体将变成
Numbers2D &func() {
return numbers[0][2];
}
相关文章:
- Mongodb c++驱动程序:如何查询元素的数组
- 将数组的地址分配给变量并删除
- 从C++本机插件更新Vector3数组
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 数组索引的值没有增加
- 将对象数组的引用传递给函数
- 为char数组调整zlib-zpipe
- 2D数组来自文本输入,中间有空格
- std::向量与传递值的动态数组
- 在c++中用vector填充一个简单的动态数组
- 使用strcpy将char数组的元素复制到另一个数组
- 使用指针从C++中的数组中获取最大值
- C++使用整数的压缩数组初始化对象
- 告诉一个 const char 数组,除了编译时 C 样式的字符串外,它不以 '