这里,笔者想分享一个和指针功能相似的类型——引用类型。
指针类型提供了通过一个变量间接访问另一个变量的功能,但这个也会有一些书写繁琐、程序不可靠的问题。引用类型能较好的解决这些问题。
所谓引用,就是给变量起一个别名。例如: int x = 20; int &j = x; 这里就定义了变量j是i的别名,也就是说,二者共享一块存储空间。
引用和指针不同的地方在于,引用只能指向a,之后就不能指向b了,但指针p在指完变量i之后,可以再指向变量t。同时,指针存在空指针,但是没有空引用这个东西。也就是说,声明一个引用类型的变量的同时,必须赋值。
引用其实是一种隐式的指针,但每次使用的时候,不用写*。而且,它可以对用另外一个引用,例如: int &m = j; 这个时候,引用变量m和j共同指向i,都是i的别名。
关于引用的传递:
之所以有引用,主要目的是将引用作为函数的参数,也就是进行地址的传递。
void swap(int *a, int *b)
{
int c;
c = *a;
*a = *b;
*b = c;
}
以上这个函数如果要调用的话,需要是 swap(&a, &b);
但如果是写成引用,可以是:
void swap(int &a, int &b)
{
int c = a;
a = b;
b = c;
}
调用的时候就可以是 swap(a , b);
关于常量的引用传递:
引用传递也有一定的风险,因为地址的共享,实际参数的值可能会改变。对此,可以进行const 的引用。通过const 来限定引用传递参数。这样,这个形参就不能被修改了。
int max(const int &a,const int &b);
常量的引用传递常常用来代替值传递,这一点在参数占比较大的空间时会提高效率。
以上是笔者的一些分享,如果有表述错误的地方,还请更正,谢谢!