菜鸟编程 引用

来源:互联网 发布:ubuntu win7 系统时间 编辑:程序博客网 时间:2024/05/29 19:23

这里,笔者想分享一个和指针功能相似的类型——引用类型。

指针类型提供了通过一个变量间接访问另一个变量的功能,但这个也会有一些书写繁琐、程序不可靠的问题。引用类型能较好的解决这些问题。

所谓引用,就是给变量起一个别名。例如: 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);

常量的引用传递常常用来代替值传递,这一点在参数占比较大的空间时会提高效率。


以上是笔者的一些分享,如果有表述错误的地方,还请更正,谢谢!


原创粉丝点击