1. 程式人生 > >【C】指標*與引用&的解釋

【C】指標*與引用&的解釋

1)值傳遞:

int  func(int value)
{
       value++;
       return value;       //           一般需要返回值
}
int a=2;
int b=func(a);      //b==3;a==2;

按值傳遞不會改變實參的值,即上例中a的值不發生變化;

函式中會產生一個臨時的區域性變數value;

一般都會有返回值

2)引用傳遞

void func(int &value)
{
       value++;             
}
int a=2;
func(a);  //a==3;
按引用傳遞,可以改變實參的值,如上例中a==3,因為引用實際上變數的一個別名;

按引用傳遞,不會再定義區域性變數,形參和實參共用一塊記憶體區域;

按引用傳遞,可以不需要返回值,因為可以直接改變實參值;

按引用傳遞,適用於大型陣列的傳遞,節省記憶體。

3)指標傳遞

void func(int *value)
{
       (*value)++;   //二者優先順序相同,單目運算子結合性自右向左
}
int a=2;
func(&a);      //a==3; 
按地址傳遞,與按引用傳遞類似,可以改變實參的值,如上例中a的值變為3;

與按引用傳遞不同的是,函式內定義了一個區域性的指標變數,消耗了記憶體空間,並且按地址傳遞,還可以對地址進行加減,指向另一個變數;

按地址傳遞,可以不需要返回值,因為可以直接改變實參值;

 

總結:按值傳遞的函式無法改變實參;按引用和指標可以改變實參的值;按引用節省記憶體,所以比指標好用些。