一:什么是引用
引用就是给一个已经定义的变量起一个别名,并没有定义新的变量;
引用的格式为:类型& 引用变量名 = 已定义过的变量名;
int a = 1;
int& b = a;
cout << &a << endl;
cout << &b << endl;
const引用
①用常引用引用变量,变量值可修改,常引用不能修改。
int a = 1;
const int& b = a;
a = 2;//a改变b的值也会改变
//b = 3;
②只有常引用才可以引用常量。
const int a = 1;
//int& b = a;
const int& b = 2;
③引用的类型与已经定义的变量类型不同时,会生成临时对象,也就是说引用的是具有常性的临时变量,所以必须用常引用。
double a = 1.0;
//int& b = a;
const int& b = a;
引用作为参数:
如果形参为引用类型,则形参是实参的别名,会更加高效,如果不希望改变参数的值,尽量使用常引用传参。
引用作为返回值
不要返回一个临时变量的引用,因为出了作用域,临时变量就不存在了;
如果返回对象出了当前函数的作用域依旧存在,则最好使用引用返回,因为这样更高效。
二:指针和引用的区别
1.指针是一个变量,这个变量存储的是一个地址,指向内存的一个存储单元,所以指针是一个实体;而引用跟原来的变量实质上是同一个东西,只不过是原变量的一个别名。
2.引用只能在定义时初始化一次,之后不能指向其它变量;指针变量的值可变。
3.引用必须指向有效的变量,指针可以为空。
4.sizeof引用得到的是所指向的变量的大小,而sizeof指针是求指针变量的大小。
5.引用++指的是变量的大小加一,指针++指的是指向下一个空间。
6.引用比指针更安全(野指针),指针比引用更灵活。
从底层看,指针和引用是一样的。