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. 左值引用与右值引用
    做一个优秀的程序媛
  • 相关阅读:
    BZOJ 3674: 可持久化并查集加强版 可持久化并查集
    Codeforces Round #228 (Div. 1) C. Fox and Card Game 博弈
    Codeforces Round #228 (Div. 1) B. Fox and Minimal path 构造
    Codeforces Round #228 (Div. 1) A. Fox and Box Accumulation 贪心
    2016 UESTC Training for Data Structures 题解
    Codeforces Round #349 (Div. 1) B. World Tour 暴力最短路
    HDU 5344 MZL's xor 水题
    Codeforces Round #349 (Div. 1) A. Reberland Linguistics 动态规划
    Codeforces Beta Round #11 B. Jumping Jack 数学
    Codeforces Beta Round #11 A. Increasing Sequence 贪心
  • 原文地址:https://www.cnblogs.com/oytt/p/13066852.html
Copyright © 2011-2022 走看看