簡體   English   中英

如何將對二維數組的引用傳遞給函數?

[英]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] );

唯一不支持的情況是被調用函數需要靜態檢查第一個數組索引大小的保證。

您可能想嘗試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

語法不正確。

讓我們舉一個數組的例子

 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM