如何将一个二维数组的引用传递给一个函数?
我试图将一个二维数组的引用传递给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] );
唯一的情况是,当被调用函数需要静态检查第一个数组索引的大小时,
你可能想尝试cdecl或c ++ 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]);