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)不存在二级引用,可以使用指针的引用来替代二级指针

 

posted @ 2020-10-14 14:39  朱果果  阅读(104)  评论(0编辑  收藏  举报