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

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;

}

指針傳遞:spa

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.值傳遞:有一個形參向函數所屬的棧拷貝數據的過程,若是值傳遞的對象是類對象或是大的結構體對象,將耗費必定的時間和空間。code

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

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

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

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

例如:數據結構帶&與不帶&效率

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

相關文章
相關標籤/搜索