1. 程式人生 > >C++函數的三種傳遞方式為:值傳遞、指針傳遞和引用傳遞

C++函數的三種傳遞方式為:值傳遞、指針傳遞和引用傳遞

否則 方式 指針 指向 out 數據結構 logs 形參 使用

C++函數的三種傳遞方式為:值傳遞、指針傳遞和引用傳遞

值傳遞:

void fun(int x){

x += 5; //修改的只是y在棧中copy x,x只是y的一個副本,在內存中重新開辟的一塊臨時空間把y的值 送給了x;這樣也增加了程序運行的時間,降低了程序的效率。

}

void main(void){

int y = 0;

fun(y);

cout<<\"y = \"<<y<<endl; //y = 0;

}

指針傳遞:

void fun(int *x){

*x += 5; //修改的是指針x指向的內存單元值

}

void main(void){

int y = 0; fun(&y); cout<<<<\"y = \"<<y<<endl; //y = 5; }

引用傳遞:

void fun(int &x){

x += 5; //修改的是x引用的對象值 &x = y;

}

void main(void){

int y = 0;

fun(y);

cout<<<<\"y = \"<<y<<endl; //y = 5;

}

1.值傳遞:有一個形參向函數所屬的棧拷貝數據的過程,如果值傳遞的對象是類對象或是大的結構體對象,將耗費一定的時間和空間。

2.指針傳遞:同樣有一個形參向函數所屬的棧拷貝數據的過程,但拷貝的數據是一個固定為4字節的地址。

3.引用傳遞:同樣有上述的數據拷貝過程,但其是針對地址的,相當於為該數據所在的地址起了一個別名。

效率上講,指針傳遞和引用傳遞比值傳遞效率高。一般主張使用引用傳遞,代碼邏輯上更加緊湊、清晰。

引用傳遞做函數參數”是C++的特性,C語言不支持。

例:數據結構中帶&與不帶&

帶&的是引用型參數,它是地址傳遞,其實參會隨著形參的改變而改變;不帶&的參數是一般參數,是值傳遞,其實參不會隨著形參的改變而改變。所以,結構改變,並且需要傳回這種改變的要用引用型參數,否則用一般參數。GetElem(L,i)只是找到第i個元素的值,線性表的結構並未發生任何改變,所以參數L前面不用加&。ListInsert(&L,i,e)是在線性表L的第i個元素處插入一個數值為e的元素,線性表L的結構發生了改變,長度增加了,所以在L前必須加上&。如果不加,顯示L時,新增元素就顯示不出來,顯示L的長度,也仍然是增加以前的值,比實際長度少1.

C++函數的三種傳遞方式為:值傳遞、指針傳遞和引用傳遞