一,引用
引用就是对已经存在的变量取一个别名,语法上编译器不会为新的引用变量开辟一个新的空间,而是和被引用的变量共用一个内存空间。
类型& 引用变量名 =引用实体;
例如:
#include<iostream>
using namespace std;
int main(){
int a =0;
int& b=a;
cout>>a>> b>>endl;//输出0 0
cout>>&a>>&b>>endl;//这里a和b的地址一样
return 0;
}
其中,& 在c语言中还有取地址的作用。
注意要点:
1.引用必须要赋初始值;
int& b;
int c=b;
2.引用被定义之后,不能改变指向;
int a=0;
int&b =a;
int c=12;
b=c;//这里为赋值操作;
3.一个变量可以有多个引用;也可以对引用的变量进行引用。
int a=23;
int& b=a;
int& x=a;
int& d=b;
4.指针和引用的功能是类似的,但是注意指针可以改变指向,例如链表删除一节,而引用不能改变这种指向。
二,引用可以干什么
1.做参数
(1)输出型参数
#include<iostream>
using namespace std;
int swap(int& a, int& b) {
int tmp=a;
a = b;
b = tmp;
}
int main(){
int x = 21;
int y = 32;
swap(x,y);
cout << x << endl<<y << endl;
return 0;
}
(2)作返回值
a.传值返回
b.传引用返回
三.引用和指针的区别
引用和指针的不同点:
1. 引用概念上定义一个变量的别名,指针存储一个变量地址。
2. 引用在定义时必须初始化,指针没有要求
3. 引用在初始化时引用一个实体后,就不能再引用其他实体,而指针可以在任何时候指向任何
一个同类型实体
4. 没有NULL引用,但有NULL指针
5. 在sizeof中含义不同:引用结果为引用类型的大小,但指针始终是地址空间所占字节个数(32
位平台下占4个字节)
6. 引用自加即引用的实体增加1,指针自加即指针向后偏移一个类型的大小
7. 有多级指针,但是没有多级引用
8. 访问实体方式不同,指针需要显式解引用,引用编译器自己处理
9. 引用比指针使用起来相对更安全