我试图将二维数组的引用传递给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 sizeof array
将会产生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