c 函式引數的傳遞方式

2021-10-05 19:41:44 字數 2475 閱讀 1187

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)

除了形參和實參的形式,在使用變數位址作為函式引數傳遞時,

int tmp=

*a;*a=

*b;*b=tmp;

操作的是p,q所指向的位址內儲存的變數,而不是操作的p,q

(1)用陣列名作為實參,實際上是傳遞的陣列的起始位址

int a[10]

;select

(a,10

);

當用陣列名作為實參時

對於形參:一維陣列退化為指標變數

int

select

(int a[

],n)

;//int a 表示陣列的名字,只表示是陣列型別,無其他含義。

intselect

(int

*a,n)

;

(2)陣列作為引數傳遞的組合

實參形參

陣列名陣列名

陣列名指標

指標指標

指標

陣列

int a;

int&b=a;

//①

printf

("%p %p"

,&b,

&a);

0028ff

180028ff

18

此段**,宣告b是a的引用。

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...