c++引用

作者: arkliu | 来源:发表于2022-11-08 13:26 被阅读0次
    int a = 3;
    int &ra = a; // 创建a的引用
    

    引用的本质

    int main() {
        int a = 3;
        int &ra = a; // 创建a的引用
        int * const rb = &a; // 引用的本质是指针常量,引用一旦创建必须初始化,并且引用的指向将不能改变
    
        cout<<"a的地址:"<<&a<<"   a的值:"<<a<<endl;
        cout<<"ra的地址:"<<&ra<<"   ra的值:"<<ra<<endl;
        cout<<"rb的地址:"<<rb<<"   a的值:"<<*rb<<endl;
    
        cout << "==================="<<endl;
        ra = 6;
    
        cout<<"a的地址:"<<&a<<"   a的值:"<<a<<endl;
        cout<<"ra的地址:"<<&ra<<"   ra的值:"<<ra<<endl;
        cout<<"rb的地址:"<<rb<<"   a的值:"<<*rb<<endl;
        return 0;   
    }
    
    image.png

    引用用于函数的参数

    引用传递形参的改变,会影响原有的参数。

    void swap(int &ra, int &rb) {
        int temp;
        temp = ra;
        ra = rb;
        rb = temp;
    }
    
    int main() {
        int a = 3;
        int b = 4;
        swap(a, b);
    
        cout<<"a:"<<a<<"   b:"<<b<<endl;
        return 0;   
    }
    
    image.png

    使用引用简化二级指针传参

    #include <iostream>
    using namespace std;
    
    void fun1(int **p) {
        *p = new int(3);
        cout <<"  fun1的地址:"<< *p  << "  fun1的值:"<<**p<<endl;
    }
    
    void fun2(int *&p) {
        p = new int(5);
        cout <<"  fun1的地址:"<< p  << "  fun1的值:"<<*p<<endl;
    }
    
    int main() {
        int *p = nullptr;
        fun1(&p);
        cout <<"  main的地址:"<< p  << "  main的值:"<<*p<<endl;
    
        cout <<"--------------"<< endl;
        fun2(p);
        cout <<"  main的地址:"<< p  << "  main的值:"<<*p<<endl;
        return 0;   
    }
    
    
    image.png

    引用用于函数返回值

    • 如果返回局部变量的引用,其本质是野指针
    int& fun() {
        int i = 10;
        return i;
    }
    int main() {
        int& a = fun(); 
        return 0;   
    }
    
    • 可以返回函数的引用参数,类的成员,全局变量,静态成员
    //返回静态成员
    int& fun() {
        static int i = 10;
        return i;
    }
    int main() {
        int& a = fun();
        cout << "a = "<<a<<endl;
        return 0;   
    }
    
    // 返回函数形参
    int& fun(int &rb) {
        rb++;
        return rb;
    }
    int main() {
        int a = 5;
        int &rb = fun(a);
        cout << "a = "<<a<<"   rb = "<<rb<<endl;
        return 0;   
    }
    
    • 返回非const引用的函数可以作为一个左值
    int& fun(int &rb) {
        rb++;
        return rb;
    }
    int main() {
        int a = 5;
        fun(a) = 33;
        cout << "a = "<<a<<endl;
        return 0;   
    }
    
    image.png

    相关文章

      网友评论

          本文标题:c++引用

          本文链接:https://www.haomeiwen.com/subject/zhydtdtx.html