关于指针的博客前边写过,可以去看看:
今天只要看看引用的知识:
什么是引用:
"引用"是C++中引入的新的变量类型,它的作用是为一个变量起一个别名。
int a=10;
int &b=a;
b是a的引用,即b是a的别名,a和b的作用相同。对a所进行的操作的结果与对b所进行的操作结果是完全相同的。声明b为引用类型并不需要为b另外开辟空间来存放b,a和b代表同一块空间,具有同样的地址,声明b是a的引用可以理解为:使变量b具有变量a的地址。
引用的特点:
1,一个变量可以有多个引用。
2,引用可以传递:
int a=10;
int &b=a;
int &c=b;
&c=b 和 &c=a是完全一样的,因为a和b是同一个东西。
3,引用必须初始化,而且只能在初始化的时候引用一次,不能再改为其它变量的引用。一般在初始化变量时,初始值会被拷贝到新建的对象中。然而在定义引用时,程序会把引用和它的初始值绑定在一起,而不是将初始值拷贝给引用。一但初始化完成,引用将和它的初始值绑定在一起,不能再作为其它变量的引用。
4,引用不是创建一个对象,而是给已有的对象起个别名而已。
5,引用不是对象,所以不能定义引用的引用。
6,定义引用时,引用的类型要严格和对象类型符合。
7,const 引用:
可以把引用绑定到const对象上,就像绑定到其他对象上一样,称作对常量的引用,与普通引用不同的是,不能通过对常量的引用来修改它所绑定的对象。
const int a=10;
const int &b=a;
a=20; //错误,不能修改常量的值(在C++中被const修饰的是常量)
b=20; //错误,不能通过常引用来修改它所绑定的对象
8,初始化和对const的引用:
第6条提到,引用的类型必须与对象的类型严格的一致,但是有两个特例。第一个特例就是在初始化常量引用时允许用任意表达式作为初始值,只要该表达式的结果能转成引用的类型即可。允许为一个常量引用绑定非常量的对象,字面值,表达式等。
int a=10;
const int &b=a; //允许const int &绑定到一个普通的int对象上
const int &c=10; //允许const int &绑定字面值
const int &d=c*10; //允许const int &绑定表达式
int &v1=10; //错误
int &v2=c*10; //错误
9,对const的引用可能引用一个并非const的对象。
int i=10;
int &r1=i; //正确,让r1绑定i
const int &r2=i; //正确,让常引用r2绑定i,但是不允许通过r2改变i
r1=20; //正确
r2=20; //错误,r2是一个常引用不能通过r2改变i
10,引用作为函数参数:
我们知道在C中参数传递有两种方式"值传递"和"址传递",但本质上都是值传递,要在函数外改变变量的值,就必须要进行址传递。而c++中又引入了引用型变量作为函数形参。
11,当不希望函数内改变函数外的值时,尽量采用常引用传参。
12,传引用作为返回值。
指针和引用的区别和联系: