• 引用


    引用的申明:引用变量是一个别名,也就是说,它是某个已存在变量的另一个名字。一旦把引用初始化为某个变量,就可以使用该引用名称或变量名称来指向变量。引用的本质是变量内存地址的另一个标签。

    int x;   //变量的申明
    int& r = x;   //引用申明,初始话(申明时必须初始化)

    引用和指针的区别:

    • 不存在空引用。引用必须连接到一块合法的内存。
    • 一旦引用被初始化为一个对象,就不能被指向到另一个对象。指针可以在任何时候指向到另一个对象。
    • 引用必须在创建时被初始化。指针可以在任何时间被初始化。

    举个栗子:

     1 #include <iostream>
     2 using namespace std;
     3 
     4 int main()
     5 {
     6     int a = 10;
     7     double b = 20;
     8     //因为C++严格区分大小写,所以a和A是两个不同的值
     9     int& A = a;   //A是初始化为a的整型引用
    10     double& B = b; //B是初始化为b的浮点型引用
    11     
    12     cout <<"a = " << a <<endl;
    13     cout <<"A = " << A <<endl;
    14     cout <<"b = " << &b <<endl;
    15     cout <<"B = " << &B <<endl;
    16     return 0;
    17 }

    结果为:

    a = 10
    A = 10
    b = 0x7ffeee41da90
    B = 0x7ffeee41da90

    引用做参数:在日常的程序中我们常常把引用作为参数来使用,也是引用的最多的地方。举个栗子:

     1 #include <iostream>
     2 using namespace std;
     3 
     4 void temp(int& sum)   //引用作为参数,是把形参(引用变量)指向实参变量单元来进行计算
     5 {
     6     sum++;
     7     cout <<"&sum  = " << &sum  <<endl;
     8 }
     9 int main()
    10 {
    11     int value = 10;
    12     temp(value);
    13     cout <<"&value  = " << &value  <<endl;
    14     cout <<"value  = " << value  <<endl;
    15     return 0;
    16 }

    结果为:

    &sum  = 0x7ffeb143b758
    &value  = 0x7ffeb143b758
    value  = 11

    可以发现形参和实参的内存地址是一样的,说明在处理引用变量作为形参的函数时,其实就是在处理实参。

    引用作返回值:通过使用引用来替代指针,会使 C++ 程序更容易阅读和维护,另外引用返回一个函数值的最大好处是,在内存中不产生被返回值的副本。

     1 #include <iostream>
     2 using namespace std;
     3 
     4 int arr[5] = { 1,2,3,4,5 };
     5 int& arrchange(int i)   //引用作为返回值,函数的功能改变arr的值
     6 {
     7     return arr[i];
     8 }
     9 
    10 int main()
    11 {
    12     arrchange(1) = 10;
    13     arrchange(4) = 20;
    14     for (size_t i = 0; i < 5; i++)
    15     {
    16         cout << "arr["<< i <<"] = " << arr[i] << endl;
    17     }
    18 }

     结果为:

    arr[0] = 1
    arr[1] = 10
    arr[2] = 3
    arr[3] = 4
    arr[4] = 20
  • 相关阅读:
    Debian 安装配置(包括kdevelop)
    linux matlab2016 安装
    Qt5.7 无法输入中文问题
    阻塞方法与InterruptedException
    java的null
    原子性、可见性、有序性与指令重排序
    物理机内存模型与java内存模型
    java构造函数总结
    什么时候需要用super
    重载与重写
  • 原文地址:https://www.cnblogs.com/xiaodangxiansheng/p/10915946.html
Copyright © 2020-2023  润新知