一. 引用与指针的相同点
1.都是指向一个变量的内存地址,底层实现都相同。
int x = 6;
00BE13D8 mov dword ptr [x],6
int *y = &x;
00BE13DF lea eax,[x]
00BE13E2 mov dword ptr [y],eax
int x = 6;
00FE13D8 mov dword ptr [x],6
int &y = x;
00FE13DF lea eax,[x]
00FE13E2 mov dword ptr [y],eax
2.一个const指针可以指向一个const变量;一个const引用可以引用一个const变量。
int x = 6;
const int *y = &x;
int x = 6;
const int &y=x;
3.一个const指针可以指向一个非const修饰的变量;一个const引用也可以引用一个非const修饰的变量。
const int x = 6;
const int *y = &x;
const int x = 6;
const int &y = x;
二. 引用与指针的不同点
1.引用一旦定义就不能在进行修改,而指针还可以修改。
int a = 6;
int b = 8;
int &ra = a;
int *pa=a;
ra=b;
pa=b;
2.指针有多级指针,而引用没有。
int **p=a;
int &&p=a;
3.引用自加改变变量的内容,指针自加改变了指针指向。
4.在sizeof中含义不同:引用结果为引用类型的大小,但指针始终是地址空间所占字节个数。
5.一旦一个引用被初始化为指向一个对象,就不能再指向其他对象,而指针可以在任何时候指向任何一个同类型对象。
6.引用使用起来比指针更安全。
7.引用在定义时只能对已经存在的变量或对象进行引用,而指针不用可以定义为NULL。