C 引數傳遞

2021-09-25 12:49:15 字數 2769 閱讀 9878

2.指標與引用區別

3.引數為指標的指標或指標的引用

將實參複製乙份給形參,形參為函式的區域性變數,因此函式對形參操作對實參沒有影響。若傳遞物件會產生物件副本,會呼叫拷貝建構函式,操作完後要呼叫析構函式。

形參為指向實參位址的指標,其也算一種按值傳遞,只不過是將實參的位址作為引數傳遞給形參,因此函式對形參的指向操作時會改變實參。若傳遞物件會產生物件副本,會呼叫拷貝建構函式,操作完後要呼叫析構函式。

形參相當於實參的別名,因此函式相當於直接對實參進行操作。若傳遞物件不產生物件副本,效率更高。

下面看看三種引數傳遞的具體**:

#include

;using namespace std;

void

swap1

(int a,

int b)

;//按值傳遞

void

swap2

(int

*a,int

*b);

//指標傳遞

void

swap3

(int

&a,int

&b);

//引用傳遞

intmain()

//按值傳遞

void

swap1

(int a,

int b)

//指標傳遞

void

swap2

(int

*a,int

*b)//引用傳遞

void

swap3

(int

&a,int

&b)

執行結果:

指標引用

定義:int *p;

定義:int &b=a;

初始化:p=&a; 或int *p=&a;

必須定義同時初始化

可修改指向,指向可為空

初始化後不可改變,指向必須有效

指標是個實體,有多級指標

引用是個別名,沒有位址,沒有多級引用

不進行安全檢查

引用過程會進行安全檢查

sizeof(指標)得到指標大小

sizeof(引用)得到變數的大小

自增自減操作是對位址的操作

自增自減操作是對所指變數操作

若引數為指標,並且需要對指標本身進行修改,那麼就需要將函式引數型別設為指標的指標或者指標的引用,如下面例子:

#include

;#include

;using namespace std;

void

func

(char

*a);

//指標

void

func1

(char

**a)

;//指標的指標

void

func2

(char

*&a)

;//指標引用

intmain()

//指標

void

func

(char

*a)if

(*a ==

'\0'

)return

;else

func

(a);

func

(a);

}//指標的指標

void

func1

(char

**a)if(

**a ==

'\0'

)return

;else

func1

(a);

func1

(a);

}//指標引用

void

func2

(char

*&a)if(

*a ==

'\0'

)return

;else

func2

(a);

func2

(a);

}

執行結果為:

我們分析一下這段程式。這段程式的作用是列印出字串中的每個字元,若遇到#號則跳過。b、c、d為指向字串首位的位址,分別將這三個指標作為引數傳遞給三個遞迴函式func()、func1()、func2()。接下來我們逐個分析各個函式:

直接把指標b作為引數傳遞給func()函式,由於每次遇到return都會釋放指標a,因此指標的指向並不會改變。執行過程如下,輸出為:a b b。

func1()函式把指標的指標作為引數,*a代表指標,a代表指標的指標,每當遇到return時指標的指標a都會被釋放,但指標的指向已經改變,因此在遇到字元』#'後指標已經指向後面的字元,可以繼續輸出後面的字元。執行過程如下,輸出為:a b c d e。

func2()函式把指標的引用作為引數,因此指標會一直自增,不會隨著return而釋放,直至指標指向』\0』,程式停止。

若實參為指標,並且想要對指標本身進行修改,那麼就需要使用指標的指標或者指標引用作為函式引數。

c 引數傳遞

引數型別分為int,ref,out三種,預設為int.int型別在字方法中修改了對應變數後,主方法中的值不會發生變化.ref型別在方法中修改了對應變化後,主方法中的值也會發生變化.out主方法中對應的變數不需要初始化.例子 using system using system.collections....

c 引數傳遞

引數傳遞 形參 parameter 和實參 argument int num int a,int b int num int a,int b 在函式的宣告或者定義裡,由由0個或多個形參組成的列表。intmain 形參的型別決定了形參實參互動的方式,如形參是引用型別,他將繫結到對應的實參上,引用形參是...

C 引數傳遞

值型別值傳遞 public void add1 int a 值型別引用傳遞 public void add2 ref int a public void add3 out int a 呼叫 b 5 add1 b b 5,輸出10 add2 ref b b 10,輸出10 add3 out b b 1...