zoukankan      html  css  js  c++  java
  • 【C/C++】引用&的含义/语法/作为函数参数/函数返回值/本质/常量引用

    1. 含义
      引用不产生副本,只是给原变量起了别名。
      对引用变量的操作就是对原变量的操作。

    2. 基本语法
      数据类型 &别名 = 原名
      e.g.

    int a = 10;
    int &b = a; //引用必须要初始化,一旦初始化后不可以更改:因为本指是指针常量,不可以修改指针的指向
    

    可以通过赋值修改:

    int main()
    {
       int a = 10;
       int &b = a;
       int c = 20;
       b = c; //可以赋值,但是不能更改引用
       cout << "a" << a << endl;
       cout << "b" << b << endl;
       system("pause");
    }
    


    发现更改了引用b的值之后,a的值也跟着改变了。
    对引用变量的操作就是对原变量的操作。

    1. 引用作为函数参数
      作用:传参让形参修饰实参
      优点:简化指针修改实参。
      void test01(&a)

    2. 引用作为函数返回值

    #include <iostream>
    using namespace std;
    
    //返回局部变量引用
    int& test01()
    {
       int a = 10; //局部变量存放在 栈区
       return a;
    }
    
    //函数调用可以作为左值,调用完后返回a的引用。
    //左值必须为可修改的值
    int& test02()
    {
       static int a = 10; //静态变量,存放在全局区,全局区数据在程序结束后系统释放
       return a;
    }
    
    int main()
    {
       // 不能返回局部变量的引用
       // int &ref = test01();
       // cout << ref << endl;
       
       int &ref2 = test02();
       cout << ref2 << endl;
       
       test02() = 1000; //如果函数的返回值是引用,这个函数调用可作为左值,因为引用相当于返回了变量,可以被修改
       cout << ref2 << endl;
    
       system("pause");
    }
    
    1. 引用的本质
      在C++内部实现一个指针常量。
      指针常量:指针的指向不可以修改,指针指向的地址的内存中的值可以修改。
    //发现是引用,转换为 int* const ref = &a;
    void func(int& ref)
    {
          ref = 100; // ref是引用,转换为*ref = 100
    }
    int main()
    {
          int a = 10;
    
          //自动转换为 int* const ref = &a; 创建引用相当于创建了一个指针常量:指针的**指向固定**
          int& ref = a;
    
          ref = 20; //内部发现ref是引用,自动转换为:*ref = 20;
    
          func(a);
    }
    
    1. 常量引用
      作用:修饰形参,防止误操作
    #include <iostream>
    using namespace std;
    
    //打印数据函数
    void showValue (const int& val)
    {
    //作用2: 防止误操作
       //val = 1000; 报错,不能修改
       cout << val << endl;
    }
    
    int main()
    {
       //常量引用
       //使用场景:用来修饰形参,防止误操作
    
    //作用1: 直接赋值(常值)
       //加上const之后 编译器将代码修改 int temp = 10; const int &ref = temp;
       //int& ref = 10; 报错,引用必须引一块合法的内存空间
       const int& ref = 10; 
       //ref = 20; 报错,加入const之后变为只读,不可以修改
    
       int a = 100;
       showValue(a);
       cout << a << endl;
    
       system("pause");
    }
    
  • 相关阅读:
    (原创)在ER/Studio中使用宏把Attribute name复制到Definition
    Xming + PuTTY 在Windows下远程Linux主机使用图形界面的程序
    一个时间日期转换格式的小功能(Oracle)
    C#正则表达式整理备忘【转】
    【转】一篇好文,以在迷茫时阅读
    经常关注的、极具参考价值的网站收集(无限畅想版)
    中文分词备忘
    我心目中的编程高手
    网站推荐
    通过手机短信控制电脑
  • 原文地址:https://www.cnblogs.com/kinologic/p/14041281.html
Copyright © 2011-2022 走看看