• C++入门


    举例:通过调用函数改变main函数里的变量的值

    void foo(int m) {
        m = 8;
    }
    
    int main(int argc, char const* argv[]) {
        int n = 5;
        foo(n);
        return 0;
    }

    可知,n的值不会被改变。

    方法:使用指针

    void foo(int* pN) {
        *pN = 8;
    }
    
    int main(int argc, char const* argv[]) {
        int n = 5;
        foo(&n);   //取地址
        return 0;
    }

    但是使用指针可能会引发一些问题:

    传指针时,必须要对指针的地址进行检查

    void foo(int* pN) { *pN = 8; }
    
    int main(int argc, char const* argv[]) {
        int n = 5;
        foo(nullptr);
        cout << n << endl;
        return 0;
    }

    编译器在编译时检测不出,在运行时才报错,当然可以通过检测空指针保证指针非空。

    但是也无法保证函数执行到判断之后地址依然存在。

    所以C++认为本质上就是想改变地址里的内容,只是地址的确定无法检测。干脆就不使用指针,引入引用

        int n = 5;
        int& refN = n;
        refN = 6;
        cout << n << endl;

    引用--变量的别名

    ...
    // void foo(int n) { n = 8; }   //传入的参数也要是引用类型
    void foo(int& n) { n = 8; }
    
    int main(int argc, char const* argv[]) {
        int n = 5;
        int& refN = n;
        foo(refN);
        cout << n << endl;
        return 0;
    }

    引用的地址和n的地址相同,引用本身占据了4字节空间

    引用的本质:

    引用实质上是指针,

    1)引用在定义的时候必须初始化,不能用常量为引用赋值

    ------定义时关联某个对象,并将对象的地址存放起来

    2)只有常量引用可以使用常量来初始化

    3)引用的关系一旦建立则无法修改

    4)引用的使用:

      --作为函数参数

      --作为函数返回值

    5)不存在二级引用,可以使用指针的引用来替代二级指针

  • 相关阅读:
    CF 118E Bertown roads 桥
    hdu 3917 Road constructions 最大权闭合子图
    hdu 4714 Tree2cycle 树形经典问题
    POJ 2516 Minimum Cost 最小费用流
    POJ 3921 Destroying the bus stations 沿着最短路迭代加深搜索
    POJ 3422 Kaka's Matrix Travels K取方格数
    BZOJ 3083: 遥远的国度 dfs序,树链剖分,倍增
    hdu 4010 Query on The Trees LCT
    poj 2455 Secret Milking Machine 二分+最大流 sap
    定制标记---简单标记处理器
  • 原文地址:https://www.cnblogs.com/y4247464/p/13814838.html
Copyright © 2020-2023  润新知