C/C++基础(三)

解决问题:

了解C++变量?

了解C++引用的作用?

了解C++引用的本质?

1. C++变量

  • 变量名实际上是一段连续的内存空间的别名。
  • 程序通过变量来申请并命名内存空间。
  • 通过变量的名字可以使用存储空间。

2. 引用是C++对C的重要补充。在C/C++中指针的作用基本一样,但是C++增加了另外一种给函数传递地址的途径,就是按引用传递。引用可以作为一个已定义变量的别名。

语法:

Type& ref = val;

案例1:

void test0(){
    int a = 10;
    int& b = a; // 给变量a取个别名
    b = 100;
    int& c = a; // 一个变量可以有n个别名
    c = 200;
}

void test1(){
    int a = 10;
    int b = 20;
    // int& ref; 引用必须初始化
    int& ref = a; // 引用一但初始化就不能被改变
    // ref = b; //不能改变引用
}

void test2(){
    // 建立数组引用的方法一
    typedef int ArrRef[10];
    int arr[10];
    ArrRef& aRef = arr;
    for (int i = 0; i < 10; ++i){
        aRef[i] = i + 1;
    }

    // 建立数组引用的方法二
    int (&f)[10] = arr;
    for (int i = 0; i < 10; ++i){
        f[i] = i + 10;
    }
}

3. 函数参数和返回值。

最常看见引用的地方是函数参数和返回值。当引用被作为函数参数时,在函数内对任何引用的修改,将对还函数外的参数产生改变。当然也可以通过指针来完成同样的事情,使用引用语法上更加清晰。
如果函数返回一个引用,必须像从函数中返回一个指针一样对待。当函数返回值时,引用关联的内存一定要存在。

案例2:

void valueSwap(int n, int m){
    int temp = n;
    n = m;
    m = temp;
}
// 交换失败

void pointSwap(int *n, int *m){
    int temp = *m;
    *m = *n;
    *n = temp;
}
// 交换成功

void refSwap(int &m, int &n){
    int temp = m;
    m = n;
    n = temp;
}
// 交换成功

上面的案例中,地址传递和引用传递都能达到相同的目的,所以C++更主张引用传递,因为语法上更清晰。

4. 引用的本质

引用的本质是一个指针常量。

Type& ref = val; // Type* const ref = val;

所以,引用所占空间大小和指针相同。

猜你喜欢

转载自www.cnblogs.com/mungerz/p/10512055.html