C++将多维数组传递给函数
C++ Passing a Multi-D Array to a Function
我想通过引用将2x2数组a操作为函数,所以我的函数原型是:
void myFunction( int A[][2] );
我假设实际传递给函数的只是指向第一个元素的指针(就像1D数组一样)。因此,在函数内部,我进行了一个赋值,例如:
(*(A+1))[1] = 2;
To将更改元素A[1][1]
的值(即使在我的函数返回之后)。
假设C++
以这种方式自动通过引用将数组传递给函数,那么在我的函数中似乎不需要显式传递指向数组的指针。但是,如果我想这样做,我的函数原型和上面赋值的类似物的正确语法会分别如下吗?
void myFunction( int (*A)[][2] );
和
(*(*A+1))[1] = 2;
如果您的decl是:
void myFunction( int A[][2] );
你可以这样访问数组:
A[1][1] = 2;
当你使用C++而不是C.时,这一点不会改变
多维数组在C++中不是作为嵌套数组实现的,而是作为连续块实现的,这也是为什么必须静态指定除第一个维度之外的所有维度的原因。因此,您基本上应该将这样的数组视为1D数组,并为索引计算添加语法糖。
我想他只是想知道在c++中传递指向多维数组的指针的正确sintax是什么:
void myFunction( int (*A)[10][2] )
{
cout<<(*A)[0][0];//prints 123
}
int main()
{
int A[10][2];
A[0][0] = 123;
myFunction(&A);
}
我假设实际传递给函数的只是指向第一个元素的指针(与1D数组一样)
这是正确的。你的原型相当于:
void myFunction( int (*A)[2] )
所以在函数内部我进行了一个赋值,比如…
你不需要这么做。你可以做:
A[1][1] = 2;
(相当于你写的)。
假设C++以这种方式自动通过引用将数组传递给函数。。。
注意那里的术语;)通过引用传递某些东西在C++中有特定的含义,但事实并非如此!准确地说,数组衰减为指向其第一个元素的指针,并且该指针是按值传递的。
但如果我想这样做,我的函数原型和上面赋值的模拟的正确语法会分别如下吗?
否;无法编译。指针必须指向完整的类型;您需要数组大小信息。所以你的原型必须是这样的:
void myFunction( int (*A)[7][2] )
同样,您可以简化阵列访问:
(*A)[1][1] = 2;
以下可能会有所帮助:
void myFunction(int (&A)[2][2]) {
A[1][1] = 2;
}
您可以在主函数中调用它
myfunction(&myarray);
功能原型是
myfunction(int(*a)[2][2])
- 第 i 个元素返回 i 的函数数组
- 使用嵌套函数数组是个好主意吗?
- 正确实现类函数数组
- 试图引用已删除函数数组的相等运算符
- 如何在静态函数中使用成员函数数组
- 无法创建函数数组
- 构造函数数组
- 使用开关或定义函数数组 - 更快
- 编写一个函数,该函数将覆盖主函数数组中的值
- 可以像'funs[1]();'一样调用的函数数组
- std::AVX内部函数数组
- 如果数组大小未知,如何将函数数组作为参数传递
- 从函数数组中获取值
- 使用元编程在编译时初始化函数数组
- 将C函数数组转换为C++函数指针数组
- 复制构造函数 [数组] C++
- 添加函数数组并随机选择其中一个
- 指针到私有成员函数数组
- 可以单独声明函数数组的元素
- (c++)将main中的随机值保存到函数数组中