zoukankan      html  css  js  c++  java
  • 2. C++中的引用

    1.  引用的基本使用

    • 作用:给变量起别名

    • 语法:数据类型  &别名=原名

    • 注意:

      • 别名数据类型与原名数据类型一致。

      • 引用必须初始化

      • 引用一旦初始化后,就不可以更改(只能作为一个变量的别名)

      • 一个变量可取多个别名,即可定义多个引用变量作同一个变量的别名

    int a =10;
    int &b=a;  //int &b;代码是错误的必须初始化
    //引用在初始化后,不可以改变
    int c= 20;
    b=c;   //赋值操作,而不是更改引用。

    2.  引用做函数参数

    • 作用:函数传参时,可以利用引用的技术让形参修饰实参

    • 优点:可以简化指针修改参数

    #include <iostream>
    using namespace std;
    //交换函数
    //1.  值传递:形参不会修饰实参
    void swap1 (int a,int b)
    {
        int temp = a;
        a=b;
        b=temp;
        cout << "swap1 a =" << a <<endl;
        cout << "swap1 b =" << b <<endl;
    }
    
    
    //2.  地址传递:形参会修饰实参
    void swap2(int *a,int *b)
    {
        int temp = *a;
        *a=*b;
        *b=temp;
    }
    
    
    //3.  引用传递:形参也修饰实参
    void swap3(int &a,int &b)  //&a相当于下面a的别名
    {
        int temp = a;
        a=b;
        b=temp;
        cout << "swap1 a =" << a <<endl;
        cout << "swap1 b =" << b <<endl;
    }
    
    int main()
    {
        int a=10;
        int b=20;
        
        swap1(a,b);   //值传递调用
        cout << " a =" << a <<endl;
        cout << " b =" << b <<endl;
        
        swap2(&a,&b); //地址传递
        cout << " a =" << a <<endl;
        cout << " b =" << b <<endl;
    
        swap3(a,b);    //引用传递
        cout << " a =" << a <<endl;
        cout << " b =" << b <<endl;
        system("pause");
        return 0;
    }

     通过引用参数产生的效果同按地址传递是一样的。

     

    3.  引用做函数返回值

    • 作用:引用是可以作为函数的返回值存在的

    • 注意:不要返回局部变量引用

    • 用法:如果函数的返回值是引用,函数调用可以作为左值

    • 作为函数返回值格式如下:

      • 返回类型&  函数名(形参列表及类型说明){函数体}

    #include <iostream>
    using namespace std;
    //1.  不要返回局部变量引用
    int& test1()
    {
        int a=10;
        return a;
    }
    
    //2.  函数调用可以作为左值
    int& test2()
    {
        static int a=10;  //静态变量,存放在全局区,程序结束后系统自动释放
        return a;
    }
    
    int main()
    {
        int &ref1 = test1();
        cout <<"ref =" <<ref <<endl;   //第一次结果正确,是因为编译器做了保留
        cout <<"ref =" <<ref <<endl;   //第二次结果错误,是因为a的内存释放
    
        int &ref2 = test2();
        cout << "ref2 =" <<ref2 <<endl;
    
        test2()=1000;  //如果函数的返回值是引用,函数调用可以作为左值
        cout << "ref2 =" <<ref2 <<endl;
        system("pause");
        return 0;
    }

    4.  引用的本质

      本质:引用的本质在c++内部实现是一个指针常量(请区别与常量指针)

    ps:指针常量:指向不可改变,值可以改变常量指针:指向可以改变,值不可以改变;

    5.  常量引用

    • 作用:常量引用主要用来修饰形参,防止误操作

    • 在函数形参列表中,可以加 const 修饰形参,防止形参改变实参

    int a = 10;
    //加上const之后,编译器将代码修改 int temp=10;const int &ref =temp;
    
    const int &ref =10;
     //引用必须引一块合法的内存空间,int &ref=10;是错误的。
    //加入const之后变为只读,不可修改
    哪有什么胜利可言,坚持意味着一切
  • 相关阅读:
    禁止IOS双击上滑
    keychains
    GUID 格式化
    Dart基础使用手册
    关于Android 8.0java.lang.SecurityException: Permission Denial错误的解决方法
    Android开发者的Anko使用指南(四)之Layouts
    Android开发者的Anko使用指南(三)之资源
    Android开发者的Anko使用指南(二)之Dialogs
    Android开发者的Anko使用指南(一)之Intent
    hornor8改user模式为debug模式
  • 原文地址:https://www.cnblogs.com/BY1314/p/12708964.html
Copyright © 2011-2022 走看看