在C++中,引用的详解

1、对于‘’&‘,这个字符’,大家都很熟悉,在C语言中,它是取地址的意思,在位运算中,它是‘与’的意思,今天要说的就是在C++中,引用的意思

2、对于我这个一直用C语言编程的小白来说,一看到&这个字符便会想到取地址的意思,以至于很多时候都不理解为什么在定义函数的形式参数时,要定义成“取地址”,后来经查资料 ,才知道是取地址的意思,然而,在看到这个字符时,首先想到的还是取地址的意思

3、在C语言中,指针是其灵魂,但是在进行编程开发时,90%的工程师基本上都是栽在指针的问题上,比如,内存泄漏就是其经常出现的现象,因此,在后续的研发时 ,不提倡使用指针,那么这时如何采用一种方法来代替指针呢?作为C语言的升级版C++,很好的解决了这个问题,那就是‘’引用‘’

4、引用和指针的区别:

       ▲ 指针在定义时,可以不初始化,而引用在定义时,必须初始化

       ▲指针变量指向的地址可以根据需要动态修改,而引用只要和某个变量绑定后就不能修改

        ▲指针本身需要4个字节存放地址,而引用本身不用分配内存空间

        ▲使用sizeof求指针变量的大小总是4个字节,表示地址所占的空间是4个字节,而sizeof引用的大小不是固定的,其大小与所

            引用的源头变量有关

5、引用的简介:

       引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样。

        引用的声明方法:类型标识符 &引用名=目标变量名;

        eg:    int & kk = pa;   //定义引用kk,它是变量pa的引用,即别名

         注意:

        (1)&在此不是求地址运算,而是起标识作用。

  (2)类型标识符是指目标变量的类型。

  (3)声明引用时,必须同时对其进行初始化。

  (4)引用声明完毕后,相当于目标变量名有两个名称,即该目标原名称和引用名,且不能再把该引用名作为其他变量名的别名。

   kk=1; 等价于 pa=1;

  (5)声明一个引用,不是新定义了一个变量,它只表示该引用名是目标变量名的一个别名,它本身不是一种数据类型,因此引用本身不占存储单元,系统也不给引用分配存储单元。故:对引用求地址,就是对目标变量求地址。&ra与&a相等。

  (6)不能建立数组的引用。因为数组是一个由若干个元素所组成的集合,所以无法建立一个数组的别名。

6、引用的应用:

   (1)引用作为参数:

         引用的一个重要作用就是作为函数的参数。以前的C语言中函数参数传递是值传递,如果有大块数据作为参数传递的时候,采用的方案往往是指针,因为 这样可以避免将整块数据全部压栈,可以提高程序的效率,那么在C++中,就由引用替代了这里指针的作用

    void swap(char & p1,char & p2)

{

      char tmp;

       tmp = p1;

       p1 = p2;

        p2 = p1;

}

(2)常引用

  常引用声明方式:const 类型标识符 &引用名=目标变量名;

  用这种方式声明的引用,不能通过引用对目标变量的值进行修改,从而使引用的目标成为const,达到了引用的安全性。

         const  int & pa;

 (3)引用作为返回值

       

要以引用返回函数值,则函数定义时要按以下格式:

类型标识符 &函数名(形参列表及类型说明)
{函数体}

  说明:

  (1)以引用返回函数值,定义函数时需要在函数名前加&

  (2)用引用返回一个函数值的最大好处是,在内存中不产生被返回值的副本。

(4)、引用和多态

    引用是除指针外另一个可以产生多态效果的手段。这意味着,一个基类的引用可以指向它的派生类实例。

猜你喜欢

转载自blog.csdn.net/xiaonan153/article/details/81114688