引用和指针的区别
1 指针
指针就是地址
2 引用
引用是给已经存在的变量取别名
备注: 引用在语法概念上,就是一个别名,没有他自己的独立空间,和引用实体共用一段内存空间
引用在底层实现上,实际上是有空间的,它在底层是按照指针的方式来实现的
int main(){
int a = 10;;
int &ra = a;//给变量a取别名
cout << &a << endl;
cout << &ra << endl;
int *pa = &a;//给变量a取地址
ra = 20;
cout << a << endl;
//*pa = 20;
//cout << a << endl;
double b = 100;
double &rb = b;
cout << sizeof(&b) << endl;//指针sizeof占个字节(32位平台)
cout << sizeof(rb) << endl;// 引用结果为引用类型的大小
system("pause");
return 0;
}
3 引用的应用场景
作为函数的参数:
如果需要通过形参来改变外部实参 可以传引用(&)
不需要通过形参来改变外部实参 可以传(const &)
作为函数的返回值 :注意不能返回函数栈的空间
备注: 只要返回值的生命周期不受函数控制(函数结束后不影响变量的生命周期)
1全局变量
2 static 修饰的变量
3 返回引用类型的变量
4 指针和引用区别大锦集
1 引用在定义时必须初始化(引用必须和一个已经存在的变量绑在一块,它不可能独立存在),而指针没有要求,指针是自由主义者,指针可独立存在
2 引用只能依附于他所引用的实体,不能再去引用别的实体.而指针拥有自由的灵魂,想指谁就指谁 .
例:T&等价于T*Const(指针和引用一样只能指向一个实体)
Const T&等价于Const T*const(指针和引用都不能修改实体的内容)
3 没有空引用,但是有空指针
4 在求sizeof时,引用结果为它的引用实体类型的大小,而指针不一样,指针始终是地址空间所占字节数(32位平台下占4个字节,64位平台下占8字节)
5 引用自加 比如 int a=10;int &ra=a; ra++ <==>a++; 而 指针自加指针向后偏移一个类型的大小(指针所指空间连续时,指针++才有意义)
6 存在多级指针,但是不存在多级引用
7访问实体方式不同,指针需要显式解引用,而引用是编译器在底层自己处理
8 引用比指针使用起来更安全