【C】指標*與引用&的解釋
阿新 • • 發佈:2018-11-16
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;
與按引用傳遞不同的是,函式內定義了一個區域性的指標變數,消耗了記憶體空間,並且按地址傳遞,還可以對地址進行加減,指向另一個變數;
按地址傳遞,可以不需要返回值,因為可以直接改變實參值;
總結:按值傳遞的函式無法改變實參;按引用和指標可以改變實參的值;按引用節省記憶體,所以比指標好用些。