zoukankan      html  css  js  c++  java
  • 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;

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

  • 相关阅读:
    [CLYZ2017]day8
    [CLYZ2017]day12
    [bzoj1503][NOI2004]郁闷的出纳员
    [CLYZ2017]day18
    [CLYZ2017]day11
    [CLYZ2017]day17
    在DLL中获取服务器路径
    SPSecurity.RunWithElevatedPrivileges 拒绝访问
    prototype1.4.0(转载)
    删除多表数据
  • 原文地址:https://www.cnblogs.com/mungerz/p/10512055.html
Copyright © 2011-2022 走看看