C++将多维数组传递给函数

C++ Passing a Multi-D Array to a Function

本文关键字:函数 数组 C++      更新时间:2023-10-16

我想通过引用将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])