- 指针是一个实体,存放的是地址,引用只是一个别名
- 引用在定义的时候被初始化,之后不可变,指针可变
- 引用不能为空,指针可以为空
- 指针和引用的自增(++)运算意义不同
- 引用初始化后不可改,没有const,指针可以为const
- 程序为指针分配内存,而引用不需要
- Sizeof引用得到所指变量或对象的大小,指针得到的是本身也就是指向对象地址的大小
- 指针和引用传递参数方式不同,指针传递参数本质上是值传递,只是传递的是地址值,而对形参的操作不会影响指针对象本身(若要改变指针对象的实参,需用指针的引用或指针的指针),引用传递传进来的是实参的地址(引用符合即为取址符合),对形参的操作都被处理成间接寻址,
- 二者都是地址的概念,指针指向一块内存,它的内容是所指内容的地址;而引用是某块内存的别名
一个小例子
//函数调用的时候,这里会执行 a = aa; b = bb,
//a和b是两个新的变量,他们的值改变不会改变aa和bb
void swap1(int a, int b){
int tmp = a;
a = b;
b = tmp;
}
//函数调用的时候,这里会执行 a = &aa; b = &bb,这里&的意思是引用,a,b是aa和bb的引用
//a和b是aa和bb的别名,其实本质就是aa和bb,就换了个说法而已,他们的值改变也就是改变aa和bb
void swap2(int &a, int &b)
{