引用

为一个变量起一个别名,是C++的重要扩充;

C++之所以增加引用机制,主要是把它作为函数参数,以扩充函数传递数据的功能。

变量的引用

声明一个引用时,必须同时使之初始化,即声明它代表哪一个变量(当引用作为函数形参时不必在声明中初始化)

1
2
3
4
5
int a;
//声明b是a的“引用”,&是引用声明符,将a的地址赋给b【只有这个形式才是引用声明符,其余的都是取地址符】
int &b = a;
/*经过声明后,a与b的作用相同,都代表同一内存数据*/

  • 在声明一个引用后,不能再使之作为另一变量的引用

-不能建立对数组的引用,即int &b[5] = a;这样是错误的,不过可以建立对数组元素的引用int &b = a[0];.
-不得建立对引用的引用,引用的指针(因为引用他没有自己独立的内存地址)
-但是在建立引用后,可以有int *p;p = &b;
-在声明了引用后,在使用它时不带&
-cout<<”引用b的值为”<<b<<“引用b的地址为”<<&b;

引用作为函数参数

三种方式实现函数参数的传递:

  1. 将变量名作为实参和形参

    传递变量值,传递单向,函数执行期间形参的变化不影响实参,形参与实参占不同存储单元

  2. 传递变量的地址

    形参是指针变量,实参是一个变量的地址;调用时形参指向实参变量单元,即可实现在函数中对实参进行修改(不够直观)

  3. 引用作为函数形参

    使形参名作为实参的“引用”,即形参成为实参的引用

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    #include<iostream>
    using namespace std;
    int main()
    {
    void swap(int &,int &); //函数声明
    int i=3,j=5;
    swap(i, j); //实参为整型变量
    cout<<<<i<<" "<<j<<endl;
    return 0;
    }

    void swap(int &a,int &b){ //等价于int &a = i;
    int t;
    t = a;
    a = b;
    b = t; //成功完成对实参的变换,相较于指针这样写来的更加直观
    }
    /*通过引用代替部分指针的工作,降低了程序设计的难度*/

    引用不仅可以用于变量,也可以用于类对象。