在c++中,當申明變量int *p 的時,表示p是一個儲存地址的變量;比如int *p=0,表示p指向地址為00000000的地址單元。當申明指針p之后,再用*p表示p指向的儲存空間的內容;&表示取變量的地址;
下面用一些代碼來解釋*和&的關系;
1 #include<iostream> 2 using namespace std; 3 int main(){ 4 int a=123; 5 //&a表示a在內存中的地址,也就是123在內存中的地址 6 cout<<"a: "<<a<<endl<<"a's address:"<<&a<<endl; 7 //此時p是一個指針,指向a所在的位置 8 int *p=&a; 9 cout<<"p: "<<p<<endl; 10 //聲明p之后,在p之前添加*表示p指向內存的值 11 cout<<"p's value: "<<*p<<endl; 12 //同時p也是 一個變量,在內存中也有一個地址儲存它,但其地址不是a的地址 13 cout<<"p's address: "<<&p<<endl; 14 //試試*&組合使用是什么效果 15 cout<<"*&p: "<<*&p<<endl; 16 //&p是一個內存地址,*&p表示&p指向地址內存空間的值,在這里表示a的地址 17 cout<<"**&p: "<<**&p<<endl; 18 //剛才我們已經知道*&p是a的地址,那么**&p就表示a的值 19 return 0;}
申明一個int變量a,賦值為123;
通過&運算可以知道 a的地址為:0019FF3C
申明一個int指針p,賦值為:0019FF3C, 也就是a的地址
通過&運算可以知道p的地址為:0019FF38;
即在內存0019FF38儲存的數據是0019FF3C;
如果仔細觀察會發現p和a的地址是連續的,間隔為4,這與int是4個字節的數據類型的事實相符合
* | & | |
a | 不存在 | 0019FF3C |
p | 123 | 0019FF38 |