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之后变为只读,不可修改
    哪有什么胜利可言,坚持意味着一切
  • 相关阅读:
    1.4.2.3. SETUP(Core Data 应用程序实践指南)
    1.4.2.2. PATHS(Core Data 应用程序实践指南)
    1.4.2.1. FILES(Core Data 应用程序实践指南)
    1.4.2. 实现 Core Data Helper 类(Core Data 应用程序实践指南)
    1.4.1. Core Data Helper 简介(Core Data 应用程序实践指南)
    1.4. 为现有的应用程序添加 Core Data 支持(Core Data 应用程序实践指南)
    1.3.2. App Icon 和 Launch Image(Core Data 应用程序实践指南)
    1.3.1. 新建Xcode项目并设置故事板(Core Data 应用程序实践指南)
    php验证邮箱是否合法
    如何使js函数异步执行
  • 原文地址:https://www.cnblogs.com/BY1314/p/12708964.html
Copyright © 2011-2022 走看看