[英]How do I pass a reference to a two-dimensional array to a function?
我试图将二维数组的引用传递给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 array
上使用sizeof将产生sizeof(int[board_width][board_height])
(就像你在参数本身上做的那样),同时使用第二种方法(声明参数)作为数组,从而使编译器将其转换为指针)将产生sizeof(int(*)[board_height])
,因此只是指针的sizeof。
虽然你可以传递对数组的引用,因为当数组未绑定到引用参数时,数组会在函数调用中衰减为指针,并且你可以像数组一样使用指针,在函数调用中使用数组更常见,如下所示:
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
语法不正确。
让我们举一个数组的例子
int a[] = {1,2,3};
int (&p) [3] = a; // p is pointing array a
因此,您可以对2D阵列执行相同操作,如下所示
const int board_width = 80;
const int board_height = 80;
void do_something(int (&array) [board_width][board_height]);
我想这就是你想要的:
void do_something(int array[board_width][board_height]);
您不能传递对函数的引用数组。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.