![d14e5956f51ebd45e338980bd9ecfd36.png](https://i-blog.csdnimg.cn/blog_migrate/ba65a01da24d431b6212fdd640841d27.jpeg)
指针和引用算是C++小白很头痛的点之一了,我自己经常就是看了忘,忘了看,为了省去找资料的时间消耗,痛定思痛决定写一篇总结,如有不到之处欢迎指出。
一.定义
1.指针:保存了另一个变量的地址的变量,通过在定义的指针名前加上*可以得到指针保存的地址信息处存储的内容。
2.引用:一个现有的变量的别名,内部实际上是通过指针实现的,所以本质上也是对另一个变量地址的存储。通过在定义的引用名前加上&可以得到引用的对象的地址。
在本质上两者意思相近,都是指向另一个存在,下面我们来说一说区别。
![0b4c53782139fcc6e0bdb40d067977e7.png](https://i-blog.csdnimg.cn/blog_migrate/17f457b652581fd7448a0959f14e3dd8.jpeg)
二.区别
1.初始化,指针*可以不用赋初值而引用&则必须要赋初值
指针
int a = 10;
//赋初值 right!!
int *p = &a;
//不赋初值 right!!
int *p;
p = &a;
引用
int a=10;
//赋初值 right!!
int &p=a;
//不赋初值 false!!
int &p;
p=a;
2.重新赋值,指针*可以重新赋值从而指向一个新的变量而引用&则不可以重新赋值来指向一个新的变量
指针
int a = 5;
int b = 6;
int *p;
p = &a;
p = &b; //right
引用
int a = 5;
int b = 6;
int &p = a;
int &p = b; //false
3.嵌套使用,指针*可以进行嵌套使用而引用&则不可以嵌套使用
指针
int a = 10;
int *p = a;
int **q = p; //right
引用
int a = 10;
int &p = a;
int &&q = p; //false
三.变量声明
以指针为例,声明方式共有两种:
int* a
int *a
这两种实际作用上没有区别
区别在于同时声明多个变量时
例:
int *a, b, c 只有a是指针,b和c均为int类型
int* a, b, c 和int, double等普通连续声明变量存在区别,它和上面的写法一样只有a是指针,b和c均为int类型,对于初学者来说容易产生误导。