当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《如何将对二维数组的引用传递给函数?》经验,为你挑选了3个好方法。

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

这个错误意味着什么,我该如何解决?



1> Johannes Sch..:

如果您在编译时知道大小,那么这样做:

//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]),因此仅仅是指针的大小.



2> CB Bailey..:

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

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

或者等价的

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

在函数内部,arr的使用方式与函数声明的方式非常相似:

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

唯一不支持的情况是被调用函数需要静态检查第一个数组索引大小的保证.



3> Mr.Ree..:

您可能想尝试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

推荐阅读
低调pasta_730
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有