1. 程式人生 > >二維陣列作為函式引數

二維陣列作為函式引數

https://www.cnblogs.com/alantu2018/p/8465894.html

 

1、二維陣列的概念

  在C語言中,二維陣列實際上是一種特殊的一維陣列,它的每個元素也是一個一維陣列。因此,二維陣列下標形式正確寫法如下:int arrays[i][j]。陣列元素是按照行順序儲存的,因此當按儲存順序訪問樹時,最右邊的陣列下標(列)變化的最快。

2、二維陣列作為函式引數

  規定:如果將二維陣列作為引數傳遞給函式,那麼在函式的引數宣告中必須指明陣列的列數,陣列的行數沒有太大關係,可以指定也可以不指定。因為函式呼叫時傳遞的是一個指標,它指向由行向量夠成的一維陣列。因此二維陣列作為函式引數正確寫法如下所示:   

void Func(int array[3][10]); 

void Func(int array[ ][10]);

因為陣列的行數無關緊要,所以還可以寫成如下形式:

void Func(int (*array)[10]);  注意*array需要用括號括起來。

這種形式的宣告引數是一個指標,它指向具有10個元素的一維陣列。因為[]的優先順序比*的優先順序高,故*array必須用括號括起來,否則變成了

void Func(int *array[10]);

這時候引數相當於是聲明瞭一個數組,該陣列有10個元素,其中每個元素都是一個指向整型物件的指標。

但是不能把第二維或者更高維的大小省略,如下面的定義是不合法的:

 void Func(int array[ ][ ]);

  因為從實參傳遞來的是陣列的起始地址,在記憶體中按陣列排列規則存放(按行存放),而並不區分行和列,如果在形參中不說明列數,則系統無法決定應為多少行多 少列,不能只指定一維而不指定第二維,下面寫法是錯誤的: 

void Func(int array[3][ ]);

  實引數組維數可以大於形引數組,例如形引數組定義為: 

 void Func(int array[3][10]); 

而實引數組定義為:int array[5][10];     進行函式呼叫Func(array)時,由於陣列在記憶體中是連續存放的,雖然形參與實引數組行數不對應,但是列數是相同的,具有相同的起始地址,這樣可以訪問到後續的值。如下述程式: