2. 引用作為函式引數傳遞
3 總結
4 參考文獻
值傳遞(單向傳遞):實參傳遞給形參 而形參的值無法傳遞給實參
該程式求最大值結果沒問題,但交換兩數有問題。int max
(int a,int b)
int swap
(int a,int b)
int main()
形參(函式定義處)為普通形式
實參(函式呼叫處)為普通形式
函式呼叫時,發生 形參=實參 的賦值
值傳遞本質是因為形參和實參儲存在不同的記憶體位址中
實參為變數位址,形參為指標變數
函式呼叫時,發生 形參=實參 的賦值,即讓指標指向變數
本例中的兩種形式//int* p=&a;
int main()
int swap
(int*a,int*b)
形參實參
指標位址
指標指標
以下為本例中的兩種形式的函式片段
實參
實參swap
(&a,
&b);
形參int
*p,*q;
p=&a;
q=&b;
swap
(p,q)
;
int
swap
(int
*a,int
*b)
除了形參和實參的形式,在使用變數位址作為函式引數傳遞時,
操作的是p,q所指向的位址內儲存的變數,而不是操作的p,qint tmp=
*a;*a=
*b;*b=tmp;
(1)用陣列名作為實參,實際上是傳遞的陣列的起始位址
int a[10]
;select
(a,10
);
當用陣列名作為實參時
對於形參:一維陣列退化為指標變數
(2)陣列作為引數傳遞的組合int
select
(int a[
],n)
;//int a 表示陣列的名字,只表示是陣列型別,無其他含義。
intselect
(int
*a,n)
;
實參形參
陣列名陣列名
陣列名指標
指標指標
指標
陣列
此段**,宣告b是a的引用。int a;
int&b=a;
//①
printf
("%p %p"
,&b,
&a);
0028ff
180028ff
18
int
*p=&a;
//②
形參為變數的引用 ——&狗int main()
int swap
(&a1,
&b1)
若狗 為指向整型的指標變數,則形參為 int* &a
將修改後的內容傳給呼叫者時,有三種方式,#include
#include
typedef
char element;
typedef
struct
lnode;
//初始化頭節點
intinitlist
(lnode *
&a)int
main()
1 一種是設定返回值return——但只能返回乙個變數。當然可以通過陣列或者結構體儲存多個變數的組合
2一種是使用 值傳遞的指標方式 (上述方式2 )—— 形參為指標型別,實參為變數位址的方式
3 定義全域性變數,在某處修改該變數值,則全域性有效
當子函式中涉及對輸入的形參進行修改的語句,並需要將修改後的內容返回給呼叫者,則使用
1 值傳遞的指標方式
2 引用 方式傳遞,
3 定義全域性變數,在某處修改該變數值,則全域性有效
4 return+值傳遞
而後者更節省記憶體,因為引用和所引用的變數為同一記憶體位址。*
《c語言程式設計》譚浩強
《c++程式設計》 譚浩強
C 函式引數傳遞方式
引數傳遞有三種方式 值傳遞 pass by value 指標傳遞 pass by pointer 引用傳遞 pass by reference 程式測試 include stdafx.h include using namespace std 值傳遞 pass by value void fun1 ...
函式引數傳遞的方式
按值傳遞 主調函式向呼叫函式傳遞引數實際上只是將實參的拷貝 即臨時副本 傳遞給了被呼叫函式,並不是實參本身,這樣被調函式不能直接修改主調函式中變數的值,而只能修改其私有的臨時副本的值。引用傳遞 對引用的操作等於對其指定的物件進行操作,當將實參傳遞給形參時,形參就指向了實參 指標傳遞 形參為指向實參位...
函式引數的傳遞方式
在編寫處理諸如int這樣的基本型別的函式時,可以向函式傳遞int數值,也可以傳遞指向int的指標。通常我們直接傳遞數值,只有需要在函式中修改該值時,我們才傳遞指標。對於處理陣列的函式,只能傳遞指標,原因是這樣能使程式的效率更加高。宣告指向常量的指標 不允許通過該指標修改被指向的值 double ra...