C C 二維陣列的引數傳遞與二維指標

2021-07-06 11:37:22 字數 1009 閱讀 8926

在進行函式引數傳遞的時候,常常需要把一組資料傳遞給函式,我們知道一維陣列在進行函式引數傳遞的時候,以陣列名作為形參就可以,因為陣列名就表示該陣列的首位址,在函式內部也直接可以用符號訪問。

那麼二維陣列的值該如何傳遞呢?其實它可以像一維陣列那樣以陣列名作為形參和實參,也可以使用二級指標來進行傳遞,常用的方式如下:

方法一:通過陣列名傳遞

這種方法第一維寬度可以省略,但必須指定第二維的寬度。

//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...