如何将一个二维数组的引用传递给一个函数?

我试图将一个二维数组的引用传递给C ++中的函数。 我知道在编译时两个尺寸的大小。 这是我现在所拥有的:

const int board_width = 80; const int board_height = 80; void do_something(int[board_width][board_height]& array); //function prototype 

但是这不起作用。 我从g ++得到这个错误:

 error: expected ',' or '...' before '*' token 

这个错误是什么意思,我该如何解决?

如果你知道编译时的大小,这将做到这一点:

 //function prototype void do_something(int (&array)[board_width][board_height]); 

这样做

 void do_something(int array[board_width][board_height]); 

实际上会传递一个指向二维数组的第一个子数组的指针(“board_width”被完全忽略,就像只有一个维数的退化情况,当int array[]接受一个指针时),这可能不是你想要什么(因为你明确要求参考)。 因此,在引用的时候,在参数sizeof array上使用sizeof将会产生sizeof(int[board_width][board_height]) (就像你会在参数本身上做的那样),而使用第二种方法(声明参数作为数组,从而使编译器将其转换为指针)将产生sizeof(int(*)[board_height]) ,因此只是一个指针的大小。

虽然你可以传递一个数组的引用,因为当数组没有绑定到引用参数时,数组会衰减到函数调用中的指针,并且可以像使用数组一样使用指针,但是在像这样的函数调用中使用数组更常见:

 void ModifyArray( int arr[][80] ); 

或等同地

 void ModifyArray( int (*arr)[80] ); 

在函数内部,arr可以像使用函数声明一样使用:

 void ModifyArray( int (&arr)[80][80] ); 

唯一的情况是,当被调用函数需要静态检查第一个数组索引的大小时,

你可能想尝试cdeclc ++ decl

 % c++decl c++decl> declare i as reference to array 8 of array 12 of int int (&i)[8][12] c++decl> explain int (&i)[8][12] declare i as reference to array 8 of array 12 of int c++decl> exit 

我想这是你想要的:

 void do_something(int array[board_width][board_height]); 

您不能将一个引用数组传递给一个函数。

语法不正确。

让我们以一维数组为例

  int a[] = {1,2,3}; int (&p) [3] = a; 

所以你可以做如下的二维数组

 const int board_width = 80; const int board_height = 80; void do_something(int (&array) [board_width][board_height]);