作為函式引數的多維陣列想到的兩個問題

2021-06-06 18:43:40 字數 635 閱讀 3236

《c和指標》中對多維陣列作為函式的引數有這個的描述:

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

這個論述,對於一般的int形二維陣列,並沒有什麼異議;但對於字串陣列,情況似乎就有點不同了。下面有乙個例子:

#include #include int main(void)

; print(choise);

}int print(char **ps)

}

這段程式如果按照上面所述的規則,在執行print函式中pp++時,程式應該是不能正常執行的,可結果是程式可以正確列印出字串。

對於乙個字串陣列,本身就是乙個字元形的二維陣列,但它也有它自己的特殊性,就是字串是以'\0'為結尾的字元陣列。也就是說,choise這個二維的陣列的每個子陣列是以'\0'結尾的,這樣,就可以告訴編譯器引數ps的維數,print函式的形參相當於char (*ps)[22]。

在這段程式裡,還有乙個小問題,就是null和「」的區別。null是什麼都沒有,就是0。""是乙個空字串,空字串也是字串,它只有乙個字元『\0』。

作為函式引數的多維陣列

c語言的陣列值得注意的地方有兩點 1 c語言中只有一維陣列,而且陣列的大小必須在編譯期就作為常數確定下來。然而,c語言中的陣列的元素可以是任何型別的物件,當然也可以是另外乙個陣列。這樣,要 出乙個多維陣列就不是一件難事。2 對於乙個陣列,我們只能夠做兩件事 確定該陣列的大小,以及獲得指向該陣列下標為...

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

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

陣列作為函式的引數

c和指標 上有一段 指標和陣列並不是相等的,當宣告乙個陣列時,它同時也分配了一寫記憶體空間,用於儲存陣列元素,但當宣告乙個指標時,它只分配了用於容納指標的空間 32位中4個位元組的大小 如 int a 5 int p a和p都具有指標值,都可以進行間接訪問和下標引用操作。但是他們還是存在很大區別 宣...