《每天學一點C語言系列》之陣列作為函式引數

2021-10-06 23:03:25 字數 2907 閱讀 8170

陣列元素作為函式引數

什麼是陣列元素?

程式設計舉例:陣列元素作為函式引數

程式分析

陣列名作為函式引數

什麼是陣列名?

程式設計舉例:陣列名作為函式引數

程式設計分析

程式設計說明

我們知道陣列元素和陣列名都是可以做為函式的引數的。

那麼他們有什麼區別呢?我們今天就來介紹一下!

一、陣列元素作為函式引數

陣列元素即組成陣列的基本單元。在函式中,陣列元素也可以作為函式的實參,它的用法和普通變數用法相同,也是單向傳遞,即「值傳遞」方式,但是要注意陣列元素不可以作為函式的形參使用

我們通過下面這個例子來理解一下:

#include

intswap

(int i,

int j)

intmain()

;printf

("before function a[0]=%d,a[1]=%d\n"

,a[0

],a[1]

);swap

(a[0

],a[1]

);printf

("after function a[0]=%d,a[1]=%d\n"

,a[0

],a[1]

);return0;

}

執行結果如下:

程式說明

1.在這個函式的主函式中定義了乙個只有兩個資料元素的陣列a,並賦初值a[0]=4,a[1]=9。通過printf函式輸出,毫無疑問,在主函式中的第一次輸出a[0]=4,a[1]=9。

2.在程式中我們定義了乙個swap自定義函式,它的作用就是將a[0]和a[1]作為實參傳遞給swap函式中的形參i

和j,也就是說在這裡定義swap函式的就是實現交換兩數的功能,因此,在swap函式中輸出結果為i=9,j=4。進行交換過程中我們定義了乙個臨時變數t,通過臨時變數t使得兩個數進行調換,所以可以驗證在這個函式中進行了值傳遞

3.由於陣列元素作為函式的實參時其用法與普通變數相同,是單向傳遞的,也就是說,只能從實參傳遞給形參,因此,在呼叫完swap函式後,主函式中的a[0],a[1]的值沒有發生改變,所以主函式中的第二次輸出結果還是a[0]=4,a[1]=9。

二、## 陣列名作為函式引數

陣列名即使用者定義的陣列識別符號。

上面我們知道了陣列元素可以作為函式引數,本次我們所講的是利用陣列名作為函式引數。陣列元素只能作為函式的實參,但是陣列名既可以作為實參也可以作為形參。

注意️:陣列名作為函式實參時,不是「值傳遞」,而是「位址傳遞」,即「址傳遞」就是把實參陣列的起始位址傳遞給形引數組,這樣兩個陣列就共同占用同一段記憶體單元。

下面我們通過程式分析這句話:

#include

void

swap

(int x[2]

)/*定義函式實現交換x[0]和x[1]*/

intmain()

;/*定義陣列a並初始化*/

printf

("before function a[0]=%d,a[1]=%d\n"

,a[0

],a[1]

);/*輸出a[0]和a[1]*/

swap

(a);

/*呼叫函式,陣列名作為函式實參*/

printf

("after function a[0]=%d,a[1]=%d\n"

,a[0

],a[1]

);/*輸出a[0]和a[1]*/

return0;

}

程式執行結果如下:

程式分析:如果想要讓swap函式實現兩數交換後,主函式中的兩數也進行交換,我們可以使用陣列名作為函式的引數,這樣操作之後,形引數組與實參陣列將共同占用同一段記憶體空間。
程式說明:1.用陣列名作函式引數,應該在主調函式和被呼叫函式中分別定義陣列,在上面這個程式中x是形參陣列名,a是實參陣列名,分別在其所在函式中定義,不能只在一方定義。

2.實參陣列與形引數組資料型別應該一致。例如這個程式中都是整形資料型別,大家在實際操作中可以根據實際問題需要來定義資料型別。

3.通過程式我們可以知道在陣列名作為函式引數時,是把實參陣列的起始位址傳遞給形引數組,這樣兩個陣列將共占用同一段記憶體單元,從而達到「位址傳遞」的效果。

假設:

陣列a的起始位址為2000,那麼x陣列的起始位址也是2000,顯然可以得出,陣列a和x將共佔同一段記憶體單元,a[0]和x[0]共佔同乙個單元。所以說,形引數組中各元素的值如果發生變化,將會使實參陣列元素的值同時發生變化。因此,呼叫swap函式可以實現a[0]和a[1]的交換。

在這裡我們補充乙個小知識:c編譯系統並不檢查形引數組的大小,只是將實參陣列的首位址傳給形引數組。所以,形引數組可以不指定大小,即在定義陣列時在陣列後面寫乙個空的方括號即可。

void

swap

(int x[

])

謹以此系列和大家一起學習乾坤未定,你我皆是黑馬更多系列將在不久推出!點讚就是對我最大的鼓勵,也是我能繼續更新下去的動力!

每天學一點(一)

記錄學習內容 js中對於函式的建立,在使用函式表示式和函式宣告相結合時,正確寫法為 var sum function sum a,b console.log sum 1,2 輸出3 若定義的變數和函式名稱書寫不一致,則會產生錯誤。var sum1 function sum2 a,b console....

每天學一點6

1.void運算子 作用於任何值都將返回undefined,常用遮蔽超連結的返回值 舉例 鳳凰網 2.window.prompt 彈出乙個輸入對話方塊 語法格式 prompt text defaulttext 引數說明 text 提示資訊 defaulttext 是可選項,是輸入框中預設顯示的文字 ...

每天學一點Python

9月11日 1.用list實現python裡的?條件表示式 false true 判斷條件 其實就是乙個list 0 還是list 1 的問題。條件成立就是list 1 不成立就是list 0 非常簡單。2.用python寫乙個氣泡排序 def mysort list for j in range ...