zoukankan      html  css  js  c++  java
  • (一)c++引用详解

    1. 引用的是什么
    2. 引用的本质  
    3. 引用的由来及其存在意义
    4. 引用和指针的区别
    5. 引用的基础用法
    6. 引用的进阶用法
    7. 左值引用与右值引用

    思考

    思考这几段函数的区别,看不懂没关系,后面会一一讲解

    #include <iostream>
    using namespace std;
    
    void swap1(int a , int b ) 
    {
    int t =a; 
    a=b;
    b=t;
    }
    
    void swap2(int *a, int *b) 
    {
    int t = *a; 
    *a = *b; 
    *b = t;
    }
    
    void swap3(int &a, int &b) 
    {
    int t = a;
    a = b;
    b = t;
    }
    
    void swap4(int &a , int &b) 
    {
    int t = a;
    a=b;
    b=t;
    }

    引用是什么

    【1】引用就是给某一个变量的别名,小名
    声明一个引用,不是重新定义一个变量,而是给这个变量多取了名字(外号)
    它不是一个数据类型,因此引用也不占储存单元,系统也不用给引用分配存储单元;
    引用大小和指针大小一致 4 ; int a = 9; int &b = a; // a 就是这个int型变量的大名 // b 就是这个int型变量的小名 // 两个都是一个东西,因此修改b也就是修改了a,同样修改了a的值也就是修改了b; b = 90; cout<<a<<endl; cout<<b<<endl; // 结果 a=90 b=90 a = 80; cout<<a<<endl; cout<<b<<endl; // 结果 a=80 b=80
    cout<<sizeof(b)<<endl;
    // 结果 sizeof(b)=4

    【2】引用功效
    引用仅仅作为一个别名好像是没有什么实际功效,它主要的作用就是作为函数参数,和返回值类型;

    【3】引用注意

      1.声明引用时候 必须同时初始化,因为没有空引用

      2.不能建立数组的引用。因为数组是一个由若干个元素所组成的集合,所以无法建立一个数组的别名

      3.引用声明完毕后,相当于目标变量名有两个名称,即该目标原名称和引用名,且不能再把该引用名作为其他变量名的别名。

      4.引用初始化后不能被改变。

     

    引用的本质

    引用本质是指针常量;引用自己就是一个地址单元;
    (int & a) == (int * const  a)
    void func(int &a)
    {
      int b = 10;
      int &a = b;
    }
    
    void func(const &a)
    {
      int b = 10;
      const &a = b;
    }
    指针常量: 指针指向的地址不可以改变,指向的内容可变; 

    引用的由来及存在意义

    可能有人会问,c没有引用这个概念,既然指针和引用本质差不多,为什么c++还要引入引用的概念,这不多此一举吗?
    引用是指针的优化版,也是c++对c的扩充;
    1:若是操作大型数据时,用指针还需要压栈,效率低,引用就不需要临时申请栈内存来存储局部变量;
    1. 引用的由来及其存在意义
    2. 引用和指针的区别
    3. 引用的基础用法
    4. 引用的进阶用法
    5. 左值引用与右值引用
    做一个优秀的程序媛
  • 相关阅读:
    abstract修饰方法总结
    linux tar.gz zip 解压缩 压缩命令
    html5视频播放
    Response.Redirect 打开新窗体的两种方法
    Gmail POP3设置
    加壳学习笔记(二)-汇编基础
    C#-异常处理:tyr,catch,finally ---ShinePans
    cocos2d jsb 打包 Android APK
    编写你自己的单点登录(SSO)服务
    一分钟制作U盘版BT3
  • 原文地址:https://www.cnblogs.com/oytt/p/13066852.html
Copyright © 2011-2022 走看看