1. 程式人生 > >C++中*與&的區別

C++中*與&的區別

*是取值運算子,對地址使用可以獲得地址中儲存的數值。 對於指標a,*a表示取a中的值
&是地址運算子,對變數使用可以獲得該變數的地址。     對於變數b,&b表示取b的地址
在定義時,* 是一個識別符號,宣告該變數是一個指標,比如說int *p; 那p就是一個指向int型的指標;
在呼叫時,*p是指標p指向的那個變數,比如說之前有int a=5;int *p=a;那麼p的值是a的地址,也就是指標p指向a,*p則等於a的值,即*p=5。
而&,則是引用,比如說有定義int a=5;再定義int b=&a;那麼這裡的b則引用a的值,即b=5,而再給b賦值:b=10,a的值也會變為10。
*和&的區別:
先定義有int x = 0;int *p = x;
1、若定義函式: void fun_1(int a){ a=5;} , 則呼叫:fun_1(x); 之後,x還等於0;因為fun_1函式只改變了形參a的值,a只是fun_1函式裡的區域性變數,呼叫fun_1(x)相當於是“a=x;a=5;”,x沒變;
2、若定義函式:void fun_2(int &a){ a=5;} , 則呼叫:fun_2(x); 之後,x等於5;因為這裡的a引用了x的值;
3、若定義函式:void fun_3(int *a){ *a=5;} , 則呼叫:fun_3(p); 之後,x也等於5;因為fun_3函式的引數a是一個指標,相當於a=p;*a則與*p指向同一地址,改變*a即改變*p即x