1. 程式人生 > >C++探索指標,雙重指標,引用

C++探索指標,雙重指標,引用

當我們的函式的引數有指標時:

void change(int *_a,int &b){
_a=&b;
}
void main(){
int a=10,b=20;
int *p_a=&a;
change(p_a,b);
printf("%d",*p_a);
}

輸出為:10

其實系統有一個隱含的操作,就是_a=p_a,讓_a也指向p_a所指向的地址,而我們對_a的指向進行改變的時候並不會影響p_a的指向。但是如果對_a指向的地址所存放的資料進行操作的話,p_a指向的地址所存放的資料也會改變,因為他們指向的同一地址。

比如這樣:

void change(int *_a,int &b){
*_a=b;
}
void main(){
int a=10,b=20;
int *p_a=&a;
change(p_a,b);
printf("%d",*p_a);
}

這樣輸出就變成了20,因為是對_a和p_a共同指向的地址所存放的資料進行操作。

但有時候我們需要的是把p_a的指向改變,讓p_a=&b,而不僅僅是對p_a所指向的地址所存放的資料進行改變。這時候我們就需要用到雙重指標,顧名思義,即指向指標的指標,就是指向一個指標的地址,這樣就可以把一個指標的地址傳遞進去,從而直接對那個指標進行操作,比如:

void change(int **_a,int &b){
*_a=&b;
}
void main(){
int a=10,b=20;
int *p_a=&a;
change(&p_a,b);
printf("%d",*p_a);
}

這裡面隱含操作就是 int** _a=&p_a;這樣*_a就是p_a了,所以輸出為20

引用就是給一個變數取一個別名,比如

int a=10;

int& ra=a;

ra=20;

printf("%d",a);

這樣輸出就是20,因為ra就是a,對ra進行操作就是對a進行操作,所以我們經常這樣對實參進行操作

就像這樣

void change(int& a){
a=20;
}
void main(){
int a=10;
change(a);
printf("%d",a);
}