作為函式引數的多維陣列

2021-05-27 10:24:48 字數 1268 閱讀 4760

c語言的陣列值得注意的地方有兩點:
1、c語言中只有一維陣列,而且陣列的大小必須在編譯期就作為常數確定下來。然而,c語言中的陣列的元素可以是任何型別的物件,當然也可以是另外乙個陣列。這樣,要「**」出乙個多維陣列就不是一件難事。

2、對於乙個陣列,我們只能夠做兩件事:確定該陣列的大小,以及獲得指向該陣列下標為0的元素的指標。

多維陣列:

int a[12][31]; 表示的是該陣列擁有12個陣列型別的元素,其中每個元素都是乙個擁有31個整型元素的陣列。

作為函式引數的多維陣列名的傳遞方式和一維陣列名相同---實際傳遞的是乙個指向陣列第乙個元素的指標。但是,兩者之間的區別在於,多維陣列的每個元素本身是另外乙個陣列,編譯器需要知道它的維數,以便為函式形參的下標表示式進行求值。這裡,舉兩個例子說明它們的區別:

int vector[10];

....

funcl(vector);

引數vector的型別是指向整型的指標,所以func1的原型可以是下面兩種中的任何一種:

void func1(int *vec);

void func1(int vec);

作用於vec上面的指標運算把整型的長度作為它的調整因子。

現在讓我們來觀察乙個矩陣:

int matrix[3][10];

...func2(matrix);

這裡,引數matrix的型別是指向包含10個整型元素的陣列的指標。func2的原型應該是怎麼樣的呢?

void func2(int (*mat)[10]);

void func2(int mat[10]);

上面的兩種形式都是可以的。

在這個函式中,mat的第乙個下標根據包含10個元素的整型陣列的長度進行調整,接著第2個下標根據整型的長度進行調整,這和原先的matrix陣列一樣。

這裡的關鍵在於編譯器必須知道第2個及以後各維的長度才能對各下標進行求值,因此在原型中必須宣告這些維的長度。第1維的長度並不需要,因為在計算下標的時候用不到它。

在編寫一維陣列形參的函式原型時,你既可以把它寫成陣列的形式,也可以把它寫成指標的形式。但是,對於多維陣列,只有第一維可以進行如此選擇。尤其是,把func2寫成這樣的原型是不對的:

void func2(int **mat);

強化C陣列作為函式引數 多維陣列的本質

include include include 多維陣列的本質就是乙個指標陣列,由於多維陣列高於3級的基本上沒有多大的意義 如果非要做3級以上的話,就是對二級的資料進行修改 int printf array01 char array 30 int len return 0 void printf03...

C 多維陣列作為函式引數該怎麼寫?

眾所周知,函式引數中一維陣列的長度會被忽略的,但二維陣列的第二維度就會被要求指定長度 否則gcc會報告 陣列元素的型別不完全 這很好理解,它是為了讓函式知道矩陣的寬度。同理,三維陣列就會被要求指定第二維度和第三維度的長度,所以n維陣列只有第一維度的長度會被忽略。那麼對於c 而言,如何將多維陣列作為引...

陣列作為函式引數

一 一維陣列名作函式引數 用陣列名作函式引數,應該在主調函式和被調函式分別定義陣列,例如 void main 在被呼叫函式中宣告了形引數組的大小為10,但在實際中,指定其大小是不起任何作用的,因為c語言編譯對形引數組大小不做檢查,只將實參陣列的首元素位址傳給形引數組。形引數組可以不指定大小,在定義陣...