栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

3、C++中的引用

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

3、C++中的引用

目录

1、什么是引用2、定义语法3、使用场合4、常量引用

4.1、作用4.2、语法4.3、引用作为函数的参数4.4、常量引用的特殊写法 5、引用作为函数的返回值6、经典例子7、注意事项

1、什么是引用

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

2、定义语法
数据类型 &引用名 = 引用的变量名;

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

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

4、常量引用 4.1、作用
    防止引用名去修改原理啊数据的值;对数据常量进行引用
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 
using namespace std; 


//全局变量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、注意事项
    引用必须要初始化 (因为引用就是取别名,取别名的对象都没有,哪里来的别名?)引用一个常量时,需要使用 const 常量引用 或者 && 右值引用引用的类型必须要匹配
     //定义一个空引用是错误的
    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;     //错误,初始化引用时类型必须匹配
    
    引用的类型匹配图:
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/784727.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号