将2D数组作为参数传递
Passing 2D array as argument
在这个例子中:
int a[2][2]={{1,2},{3,4}};
int *p=a[0];
cout<<p;
cout<<&a[0][0];
都给出相同的输出。那么为什么我不能像这样调用函数(比如fun)并循环遍历数组:
fun(a[0]);
fun(int *p)
{
cout<<p[1][1];
}
fun(a[0]); //this looks OK
void fun(int *p) // this is OK if you add return type'
^^^^
{
cout<<p[1][1]; //NOT OK! You can't have 2 indices on an `int*`
cout << p[1]; // OK, will print a[0][1]
}
回答你的问题:当你写:
p = a[0];
a[0]
(现在是1D数组的第0个元素)实际上将衰变成了一个指针p
。所以两者并不是完全相同的类型,尽管它们看起来是。当你写:
fun(a[0]);
你实际上是传递给0
数组的元素,现在是一个1D数组。因此,您可以通过以下任何一种方式接收:
fun(int *p); // decay to pointer to 1D array
fun(int (&a)[2]); // receive array by reference
在这两种情况下,fun()
现在有一个1D数组。
为了使事情更简单,将引用传递给array:
void fun(int (&p)[2][2])
{
cout<<p[1][1]; // ok !
}
用法:
fun(a); // not a[0]
你不能cout<<p[1][1];
,因为p
是int *
——一个一维数组。
相关文章:
- 在函数中使用 const int size 参数创建数组会在 Visual Studio 中抛出错误 C++:表达式的计
- 如何在模板函数中实例化其长度使用模板参数的数组
- 基于参数创建数组
- 我在解决此错误时遇到问题.我正在努力在主函数中传递数组
- 在 c++ 中使用模板传递数组时出现问题
- Pybind11 默认参数 numpy 数组或 None
- 传递数组结构、ofstream 和 interger 以运行
- 有没有办法根据命令行参数定义数组大小?运行时与编译时实例化?
- 在C++中传递数组作为函数参数的方法
- 函数参数绑定通过参考与传递指针传递数组的规则
- 如果数组变量在 c# 代码中定义为“ref”参数,则如何传递数组变量
- 你究竟如何通过函数的参数传递数组?
- c++ 传递数组而不是可变长度参数列表
- 如何在我的实际参数中通过引用传递数组
- 如何在函数C++中传递数组成员作为参数
- 在函数中传递数组作为引用参数
- 通过引用传递数组参数
- 在c++中传递数组作为函数参数
- 如何在构造函数中传递数组作为参数?c++
- 为什么编译器不在参数中传递数组字符 *arr[] 的大小?