3、C++中的引用

1、什么是引用

给已知的变量去一个别名,内存不会再为该引用分配新的内存空间,节省内存空间!!!

2、定义语法

数据类型 &引用名 = 引用的变量名;

例子:
int a=100; 
//对变量a 取一个别名 
int &q=a;   // a 与 q 是完全等价的!!

3、使用场合

一般都是用来作为参数传递,让函数直接访问数据的本身,节省临时空间的产生!!

4、常量引用

4.1、作用

  1. 防止引用名去修改原理啊数据的值;
  2. 对数据常量进行引用

4.2、语法

const  数据类型 &引用名=引用的对象; 

例子:
	int a=10086;
	
	//定义常量引用 
    const int &p=a;  //特点:别名 p 无法修改 a 的值

   //对一个常量进行引用  
    const  int  &q=1000;

4.3、引用作为函数的参数

引用作为函数的参数,用户不需要修改该数据时,那么我们就可以传递常量引用
例子:

//常量引用作为函数参数的特性
int  add(const int &a,const int &b)
{
    return a+b;  //并未修改 ab 的数据,只是访问 
}

int main()
{
        int a=10,b=20;  
        cout << add(a,b)  << endl;  //可以传递变量  

        cout << add(100,200)  << endl; //也可以传递常量
}

4.4、常量引用的特殊写法

数据类型 &&引用名;

int &&a=100;   //常量引用  

这种写法只能引用常量, 不能引用变量!! 

5、引用作为函数的返回值

注意!!!!当引用作为返回值时,必须要保证函数结束后该空间还是存在的!!
在这里插入图片描述
引用作为返回值时一般返回:静态变量,全局变量,堆空间,(传递的参数引用)… (不会被释放空间)

当一个引用作为返回时,该函数可以作为左值
在这里插入图片描述
例子:

//返回一个引用 , a 的本身 
int &re_yy()
{
    static  int a=200;
    return  a;
}

//re_yy() 作为右值
int b  = re_yy();  //理解  b = a;

//re_yy() 作为左值 
re_yy()  =  300;  //理解  a = 300;  成立!!   

6、经典例子

#include <iostream>
using namespace std; 
/*
int &re()
{
    //定义一个局部变量a 
    int a = 10086;
    //返回a的本身  
    return a;   //局部变量a 的数据已经被释放了!! 所以不能返回! 
}*/

//全局变量a 
int a = 10010;

int &re1()
{
    //修改为静态变量, 存储在数据段中
    //static int a=10010;
    return  a;
}

int main()
{
    //返回静态变量a 的引用  
    cout <<  re1() << endl; //10010  

    int &p = re1();  //为静态变量a 取一个别名   p 
    p = 10086;  //通过别名 去修改  a 的值  (p就是a ,a就是p)
    cout << p << endl; //10086 

    //输出的是多少???   
    cout <<  re1() << endl;   //10086  ->因为p已经修改静态变量a 的值!!  
                             //静态变量只能被初始化 1 次 
}

7、注意事项

  1. 引用必须要初始化 (因为引用就是取别名,取别名的对象都没有,哪里来的别名?)
  2. 引用一个常量时,需要使用 const 常量引用 或者 && 右值引用
  3. 引用的类型必须要匹配
     //定义一个空引用是错误的
    int& a;         //初始化 == 取别名
    
    int &a = 100;   //引用一个常量, 没const是错误的
    int &&b = 200;  //引用一个常量,正确
    
    int a = 100;
    int& b = a;       // 正确
    int c = 200;
    	b = c;		//正确,更改b的值,并不是更改b的引用对象,引用只能初始
    					// 化一次,后面的只是赋值
    
    char& c = a;     //错误,初始化引用时类型必须匹配
    
    引用的类型匹配图:
    在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值