值傳遞和引用傳遞 函式引數傳遞的兩種方式

2022-06-09 11:27:07 字數 2124 閱讀 8349

在定義函式時函式括號中的變數名成為形式引數,簡稱形參或虛擬引數;在主調函式中呼叫乙個函式時,該函式括號中的引數名稱為實際引數,簡稱實參,實參可以是常量、變數或表示式。

1、c語言中實參和形參之間的額資料傳遞是單向的「值傳遞」,單向傳遞,只能由實參傳給形參,反之不能。

2、被呼叫函式的形參只有函式被呼叫時才會臨時分配儲存單元,一旦呼叫結束占用的記憶體便會被釋放。

3、」按值傳遞「中包括值傳遞(實實在在的值啊!)和指標傳遞(指標傳遞引數本質上是值傳遞的方式,它所傳遞的是乙個位址值),傳遞的都是實參的乙個拷貝

主調函式向呼叫函式傳遞引數實際上只是將實參的拷貝(即臨時副本)傳遞給了被呼叫函式,並不是實參本身,這樣被調函式不能直接修改主調函式中變數的值,而只能修改其私有的臨時副本的值。

1、例子1:值傳遞(實實在在的值啊)

1 #include 2

intmain() 3

1112

void swap(int x,int

y)

13

執行結果

下面的例子體現了不論傳遞的是值還是指標(指標

也是乙個值),傳遞給被呼叫函式的都是實參的乙個拷貝,直接對拷貝進行操作不會影響實參

1 #include 2

intmain()316

17void swap(int* x, int*y)

18

執行結果

但是可以通過位址間接地改變實參的值請參見例子2

2、例子2:指標傳遞

#include int

main()

void swap(int* x, int*y)

執行結果

對引用的操作等於對其指定的物件進行操作,當將實參傳遞給形參時,形參就指向了實參(形參與實參同義,是它的乙個別名

1 #include 2

void swap(int& a, int&b)39

10int

main()

11

執行結果

用於指標傳遞,y有自己獨立的記憶體位址,儲存的內容是x的位址,*y是x的值45

int &z=x; //

用於引用傳遞,可以理解為z就是x,x就是z,只不過名字不一樣

最後再囉嗦乙個例子:

1 #include 2

using

namespace

std;

3int change1(char*name)78

int change2(char* &name)

1213

intmain()

執行結果

change1是值傳遞,形參name有自己獨立的記憶體位址,修改後name的內容變成了「alter」的位址(但string的內容還是」original!「)。

change2是引用傳遞,形參name的位址就是string的位址,或者說name就是string。

物件間值傳遞,函式引數按值,引用傳遞 legend

一 如何在兩個類a和b中傳遞value?1 方法一 兩個類中都有這個要傳遞的value成員變數。均有getvalue setvalue 函式。從乙個類中getvalue 然後將value通過另乙個類的setvalue 就可以了 二 兩個類a和b如何共享乙個變數value?1 方法一 將需要共享的變數...

用引用傳遞函式引數

1 引用傳遞引數 傳遞引用給函式與傳遞指標的效果一樣,傳遞的是原來的變數或物件,而不是在函式作用域內建立變數或物件的副本。在8 6節中,我們看到對swap int,int 傳值方式函式的呼叫不影響呼叫函式中的實參,結果並未達到交換資料的預想目的。使用指標傳遞方式的swap int int 函式的呼叫...

Python引數傳遞 引用傳遞 值傳遞

值傳遞 方法呼叫時,實際引數把它的值傳遞給對應的形式引數,方法執行中形式引數值的改變不影響實際引數的值。a1 520 a2 a1 print a1 520 print a2 520 a2 a1 1 print a2 521 print a1 520 引用傳遞 也稱位址傳遞,在方法呼叫時,實際上是把引...