C++的*和&
在c++中,当申明变量int *p 的时,表示p是一个储存地址的变量;比如int *p=0,表示p指向地址为00000000的地址单元。当申明指针p之后,再用*p表示p指向的储存空间的内容;&表示取变量的地址;
#include <iostream> using namespace std; int main(int argc, char** argv) { int a=123; //a的值和&a为a的地址;&a表示a在内存中的地址,也就是123在内存中的地址 cout<<"a: "<<a<<endl<<"a address "<<&a<<endl; //指针p获取a的地址 此时p是一个指针,指向a所在的位置 int *p=&a; //p获取到a值的地址 cout<<"p "<<p<<endl; //获取到a的值 声明p之后,在p之前添加*表示p指向内存的值 cout<<"*p value "<<*p<<endl; //指针p的地址 同时p也是 一个变量,在内存中也有一个地址储存它,但其地址不是a的地址 cout<<"&p address "<<&p<<endl; //通过指针获取到a地址 &p是一个内存地址,*&p表示&p指向地址内存空间的值,在这里表示a的地址 cout<<"*&p "<<*&p<<endl; //获取a的值 刚才我们已经知道*&p是a的地址,那么**&p就表示a的值 cout<<"**&p "<<**&p<<endl; return 0; }
通过&运算可以知道p的地址为:0x6ffe30;
即在内存0019FF38储存的数据是0x6ffe3c;
* | & | |
a | 不存在 | 0x6ffe3c |
p | 123 | 0x6ffe30 |