陣列名做函式引數

2021-06-23 08:29:51 字數 937 閱讀 5849

陣列名做函式引數

用陣列名做函式引數與用陣列元素作實參有幾點不同:

(1)用陣列元素作實參時,只要陣列型別和函式的形參變數的型別一致,那麼作為下標變數的陣列元素的型別也和函式形參變數的型別是一致的。因此,並不要求函式的形參也是下標變數。換句話說,對陣列元素的處理是按普通變數對待的。用陣列名作函式引數時,則要求形參和相應的實參都必須是型別相同的陣列,都必須有明確的陣列說明。當形參和實參兩者型別不一致時,機會發生錯誤。

(2)用普通變數或下標變數作函式引數時,形參變數和實參變數都是由編譯系統分配的兩個不同的記憶體單元。在函式呼叫時進行的值傳遞是把實參變數的值賦予形參變數。在用陣列名做函式引數時,不是進行值的傳遞,即不是把實參陣列的每乙個元素的值都賦予形引數組的各個元素。因為實際上形引數組並不存在,編譯系統不為形引數組分配記憶體。那麼,資料的傳遞是如何實現的?因為陣列名就是陣列的首位址。因此用陣列名做函式引數時所進行的傳遞實際上是位址的傳遞,也就是把實參陣列的首位址賦予形參陣列名。形參陣列名取得該首位址後,也就等於有了具體的位址。實際上是形引數組和實參陣列為同一陣列,共同使用一段記憶體空間。

#includevoid change(int k)

main()

,n=0;

while(n<=4)

for(n=0;n<5;n++)

printf("%d",x[n]);

printf("\n");

return 0;

}

輸出結果為:678910

當n=o時,把x[0]的位址傳紿被調函式change,即將形參k與實參x指向同乙個儲存單元x[0],執行被調函式後,k[0]=6,即x[0]=6:當n=1時,形參k指向x陣列的第1個陣列元素所在單元,即 k[0]與x[1]共用同一儲存單元,執行被調函式後,k[0]=7,即x[1]=7,依次類推得出x[0]到x[4]的值分別為6、7、8、9、10。

作為函式引數的陣列名

當乙個陣列名作為引數傳遞給乙個函式時會發生什麼情況呢?已知 陣列名的值 指向陣列第乙個元素的指標。此時,傳遞給函式的,是乙份該指標的copy 這裡注意,後面講解 函式如果執行了下標引用,實際上是對這個指標執行了間接訪問操作,並且通過這種這種間接訪問,函式可以訪問和修改呼叫程式的陣列元素。說明 所有傳...

二維陣列名做引數傳遞問題

在用二維陣列名作為引數傳遞時容易出現segmention error。這是因為不能正確為二維陣列中元素定址的問題,正確的方法如下 1.用指向一維陣列的指標變數,如下例子所示 cpp view plain copy print?include include define n 4 void testa...

二維陣列名做引數傳遞問題

在用二維陣列名作為引數傳遞時容易出現segmention error。這是因為不能正確為二維陣列中元素定址的問題,正確的方法如下 1.用指向一維陣列的指標變數,如下例子所示 cpp view plain copy print?include include define n 4 void testa...