在進行函式引數傳遞的時候,常常需要把一組資料傳遞給函式,我們知道一維陣列在進行函式引數傳遞的時候,以陣列名作為形參就可以,因為陣列名就表示該陣列的首位址,在函式內部也直接可以用符號訪問。
那麼二維陣列的值該如何傳遞呢?其實它可以像一維陣列那樣以陣列名作為形參和實參,也可以使用二級指標來進行傳遞,常用的方式如下:
方法一:通過陣列名傳遞
這種方法第一維寬度可以省略,但必須指定第二維的寬度。
//tab[2][3]也可以寫成tab[3];但是第二維寬度不能省
void print(float tab[2][3])
{ for(int i=0;i<2;i++){
for(int j=0;j<3;j++){
cout<
方法二:通過二級指標傳遞<1>
這種方法在函式內部可以使用符號訪問陣列元素,但是在呼叫函式前必須先開闢一段二級指標指向的記憶體,然後把陣列值拷貝到這一塊記憶體中,用完後必須手動釋放記憶體。優點是同乙個函式可以接收不同長和寬的二維陣列,缺點是必須手動開闢一段記憶體用完後還要手動**,並且要把二維陣列的值拷貝到開闢的記憶體中。
void print(float **tab,int rows,int cols)
{ for(int i=0;i
方法三:通過二級指標傳遞<2>
這種方式不僅二維陣列的長和寬可以隨意,而且同乙個函式可以接收不同型別的陣列,但是不能通過運算子來訪問了,必須通過*運算子來訪問,取值的時候必須型別強轉。
基於以上兩個優點,本人一直都是使用這種方式。
void print(void **tab,int rows,int cols)
{ for(int i=0;i
列印輸出:以上輸出結果均為下圖引數傳遞二維陣列
cpp view plain copy void func1 intiarray 10 intmain 編譯通過,注意形參宣告一定要給出第二個維度的大小,要不編譯不過。cpp view plain copy void func2 int parray 10 void func2 1 int parr...
引數傳遞二維陣列
來看 c primer 中給出的方法 void func1 int iarray 10 int main 編譯通過,注意形參宣告一定要給出第二個維度的大小,要不編譯不過。void func2 int parray 10 void func2 1 int parray 編譯通過,無法呼叫 int ma...
引數傳遞二維陣列
來看 c primer 中給出的方法 cpp view plain copy void func1 intiarray 10 intmain 編譯通過,注意形參宣告一定要給出第二個維度的大小,要不編譯不過。cpp view plain copy void func2 int parray 10 vo...