C語言學習NO3 傳參方式注意事項

2021-09-26 08:39:39 字數 1156 閱讀 2636

1. void swap(int x, int y),傳參x、y不變,只是把值傳遞

2.要傳參對應改變,傳遞指標。或者用return返回值到該變數

這種方式使用變數、常量、陣列元素作為函式引數,實際是將實參的值複製到形參相應的儲存單元中,即形參和實參分別占用不同的儲存單元,這種傳遞方式稱為「引數的值傳遞」或者「函式的傳值呼叫」。值傳遞的特點是單向傳遞,即主調函式呼叫時給形參分配儲存單元,把實參的值傳遞給形參,在呼叫結束後,形參的儲存單元被釋放,而形參值的任何變化都不會影響到實參的值,實參的儲存單元仍保留並維持數值不變

#include /* 變數x、y為swap函式的形式引數 */

void swap(int x, int y)

int main(void)

在上面這個示例**中,實參將值傳遞給形參,形參值發生互換後的值不能回傳給主調函式。因此,主調函式中的數值不變,**的執行結果為:

x = 20, y = 10

a = 10, b = 20 執行後,a、b值不變。

其實,原因很簡單。函式在呼叫時,隱含地把實參 a 的值賦值給了引數 x,而將實參 b 的值賦值給了引數 y,如下面的**所示:

/*將a的值賦值給x(隱含動作)*/

int x = a;

/*將a的值賦值給y(隱含動作)*/

int y = b;

因此,之後在 swap() 函式體內再也沒有對 a、b 進行任何操作。而在 swap() 函式體內交換的只是 x、y,並不是 a、b,當然,a、b 的值沒有改變。

這種方式使用陣列名或者指標作為函式引數,傳遞的是該陣列的首位址或指標的值,而形參接收到的是位址,即指向實參的儲存單元,形參和實參占用相同的儲存單元,這種傳遞方式稱為「引數的位址傳遞」。位址傳遞的特點是形參並不存在儲存空間,編譯系統不為形引數組分配記憶體。陣列名或指標就是一組連續空間的首位址。因此在陣列名或指標作函式引數時所進行的傳送只是位址傳送,形參在取得該首位址之後,與實參共同擁有一段記憶體空間,形參的變化也就是實參的變化

void swap(int *px, int *py)

int main(void)

(參考:

c語言學習注意

1.二維陣列指標 1 int ptr 表示指向 一群 指向整數的指標的指標 乙個指標 2 int ptr 5 表示指向 5 個指向整數的指標的指標 3 int ptr 5 它的意義是 一群 指標,每個指標都是指向乙個 5 個整數的陣列 乙個指標 2.動態陣列 二維陣列的建立 int array,i,...

C 語言學習 3

程式3 題目 乙個整數,它加上100後是乙個完全平方數,再加上168又是乙個完全平方數,請問該數是多少?1.程式分析 在10萬以內判斷,先將該數加上100後再開方,再將該數加上268後再開方,如果開方後的結果滿足如下條件,即是結果。請看具體分析 2.程式源 include math.h includ...

C 語言學習 3

程式3 題目 乙個整數,它加上100後是乙個全然平方數。再加上168又是乙個全然平方數。請問該數是多少?1.程式分析 在10萬以內推斷。先將該數加上100後再開方,再將該數加上268後再開方,假設開方後的結果滿足例如以下條件,即是結果。請看詳細分析 2.程式原始碼 include math.h in...