(一)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. 左值引用与右值引用

 

posted @ 2020-06-08 17:10  欧阳图图的少年成长记  阅读(241)  评论(0编辑  收藏  举报