初学C++的引用与指针的时候,因为没有弄清楚取地址操作符”&”和解引用操作符”*”,经常会被一些表达式搞糊涂,所以在这里做一下总结。
1. 定义引用时的&操作符只起一个标识作用,表示该变量是一个引用,并不是取地址。
int a;
int &b = a;
在上述代码中,声明了b为a的引用,即b为a的别名。a,b位于同一地址,对b进行操作即对a进行操作。
2. 声明定义指针时的*操作符只起一个标识作用,表示该变量是一个指针,并不是解引用。
int *p;
3. 初始化指针或给指针赋值时的&操作符起取地址的作用。
int value = 0;
int *p;
p = &value; //此处的&操作符起取地址的作用,取出value变量的地址,存储到指针p
4. 通过指针访问变量时,*操作符起解引用的作用。
int value = 0;
int *p;
p = &value; //此处的&操作符起取地址的作用,取出value变量的地址,存储到指针p
int result = *p; //此处的*操作符起解引用的作用,访问指针p指向的对象value
我们发现,如果声明变量b为变量a的引用,那么a,b位于同一地址,代表同一变量,对b操作就是对a操作;
如果声明变量c为指向a的指针,那么c是一个新的变量,存储的内容为a的地址,要通过c对a进行操作,需要对c进行解引用。