zoukankan      html  css  js  c++  java
  • 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)不存在二级引用,可以使用指针的引用来替代二级指针

  • 相关阅读:
    OLT配置学习
    notepad配合正则表达式处理文本
    利用expect和sshpass完美非交互性执行远端命令
    yum 数据库报错与重构
    杀死dialog
    OLT配置说明
    freeradius下发限速信息字段
    debug调试日志和数据查询
    通过windows的超级终端连接华为交换机
    强制清除交换机端口所有配置
  • 原文地址:https://www.cnblogs.com/y4247464/p/13814838.html
Copyright © 2011-2022 走看看