c++引用

C++引用 类型 &引用名 = 引用实体(变量名);。引用在定义时必须进行初始化,并且一旦初始化后,就会一直引用该变量,不能再引用其他变量。// 定义一个引用 ref,它是 num 的别名// 通过引用修改原始变量的值ref = 20;return 0;在上述代码中,ref是num的引用,对ref的操作实际上就是对num的操作。注意引用类型必须和引用实体是同种类型的。对于基本数据类型(如intdouble等),传值和传引用的效率差异通常不大。 阅读详情

c++的引用与c语言的指针相似;

引用的特性:

1  引用在定义是必须被初始化;

2  引用在被初始化时其初始化数据的类型必须和引用定义的类型相同

3  引用是c++特有的属性;

4  引用的实质是给变量取一个别名,所以相当于操作变量本身;

5  引用类型和指针类型相似,都占四个字节;

一 简单引用

简单引用的举例:

int main()
{
    int a=10;
    int &b=a;
    b=20;
    cout<<"a="<<a<<"   b="<<b<<endl;


    return 0;
}
输出20 20;

二 复杂引用

复杂引用举例:

struct complex
{
    int age=100;
};

void complex_t1(struct complex cp1)
{
    cp1.age=10;

}
void complex_t2(struct complex &cp2)
{
    cp2.age=199;

}
int main()
{
   struct complex va1,va2;
   complex_t1(va1);
   cout<<"va1="<<va1.age<<endl;
   complex_t2(va2);
   cout<<"va2="<<va2.age<<endl;
    int va3=19;
//    double &va4=va3;
//    cout<<"va4="<<va4<<endl;




    return 0;
}
输出: 100 199;

引用的实质是给变量取一个别名,所以相当于操作变量本身

int main()
{
   int va=10;
   int &vb=va;
   cout<<"address of va:"<<&va<<"  "<<"address of vb:"<<&vb<<endl;
    return 0;
}

变量va 和vb的地址相同

引用类型和指针类型相似,都占四个字节;

struct example
{
    int age;
    char name[64];
    double &va;
    int &vb;
};
int main()
{

   cout<<"sizeof(struct example)"<<sizeof(struct example)<<endl;
    return 0;
}

输出:76

引用的实质:

void modfily1(int &a)
{
    a=105;

}
void modfily2(int *const a)
{
    *a=108;

}
int main()
{
int va=12;
   modfily1(va);
   cout<<"modfily1(va)"<<va<<endl;
   modfily2(&va);
   cout<<"modfily2(va)"<<va<<endl;

    return 0;
}




输出:105和108,所以modfily2是modfily1的实质

三 引用做函数返回值

引用做函数返回值是注意事项:

* 1 不能返回局部变量的引用,主要原因是局部变量会在函数返回后被销毁,因此被返回的引用就成为了"无所指"的引用,程序会进入未知状态。

* 2 不能返回函数内部new分配的内存的引用,主要原因是当对象的属性是与某种业务规则(business rule)相关联的时候,其赋值常常与某些其它属性或者对象的状态有关,因此有必要将赋值操作封装在一个业务规则当中。如果其它对象可以获得该属性的非常量引用(或指针),那么对该属性的单纯赋值就会破坏业务规则的完整性。

* 3 应用不能成为其他应用的初始值

* 4 引用不能作为左值使用

* 5 返回的是函数返回值本身,不是其副本

* 6返回的是静态或者全局变量则可以是其他引用的初始值

例:

#include <iostream>
#include <stdlib.h>
using namespace std;
 float temp;//定义全局变量temp
 float fn1(float r);//声明函数fn1
 float &fn2(float r);//声明函数fn2 r
 float fn1(float r){//定义函数fn1,它以返回值的方法返回函数值
     temp = (float)(r*r*3.14);
	 return temp;
}
 float &fn2(float r){//定义函数fn2,它以引用方式返回函数值
	     temp = (float)(r*r*3.14);
	     return temp;
	
}
 float &fn3(float r){//定义函数fn2,它以引用方式返回函数值
	static float swap= (float)(r*r*3.14);
	 return swap;

 }
 void main(){
	     float a = fn1(10.0);//第1种情况,系统生成要返回值的副本(即临时变量)
	    // float &b=fn1(10.0); //第2种情况,可能会出错(不同 C++系统有不同规定)
		 
		       // 编译错误:cannot convert from 'float' to 'float &'//终端提示:非常量引用的初始值必须为左值,左右两边类型不相同
		       // A reference that is not to 'const' cannot be bound to a non-lvalue
		    
		        //不能从被调函数中返回一个临时变量或局部变量的引用
		        float c = fn2(10.0);//第3种情况,系统不生成返回值的副本
    //可以从被调函数中返回一个全局变量的引用
	     float &d = fn2(10.0); //第4种情况,系统不生成返回值的副本
	   cout << "a=" << a << ",c=" << c << ",d=" << d << endl;
	   //可以从被调函数中返回一个静态变量的引用
	   float &f = fn2(10.0);
	   cout << "a=" <<f << endl;
	   system("pause");
}
函数返回值引用当左值:

int& fun1()//返回变量本身
{
	static int va = 10;
	va++;
	cout << "va=    " << va << endl;
	return va;
}
int main()
{
	fun1();
	//int b = 100;
	//int& vb=fun1();
	fun1() = 100;
	fun1();
	system("pause");
	return 0;
}
输出:11 和101,以为引用返回的是变量本身,所以fun1()=100,就相当于给静态变量va赋值100;








        
Claude Skills 深度讲解 阶段 1:Function Call(2023)├─ 大模型可以调用外部工具├─ 问题:缺乏对任务的深度理解└─ 局限:工具调用简单线性阶段 2:MCP 上下文工程(2024)├─ 大模型有了更丰富的上下文和工具├─ 问题:仍然需要手动编写复杂的 Prompt└─ 局限:每次对话都需要重新加载上下文阶段 3:Claude Skills(2025)├─ 大模型有了「能力模块」的概念├─ 可以动态加载、组合、执行专门的工作流├─ 真正实现了「知识的模块化和复用」 阅读详情

相关推荐

AI中台系统设计方案探讨

集成JupyterLab、低代码建模工具(如H2O.ai)、预训练模型库(Hugging Face、PaddleHub)。:通过REST/gRPC接口封装AI能力(如OCR、语音识别),支持流量控制与鉴权(如Kong、Apigee)。:服务注册发现(Consul)、熔断降级(Hystrix)、监控告警(Prometheus+Grafana)。:分布式存储(如HDFS、Ceph)与对象存储(如S3、OSS),支持海量数据高速读写。加密传输(TLS)、动态脱敏(如数据掩码)、访问控制(RBAC)。

reset2021的博客 1036

【详解C++中的引用】

引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空 间,它和它引用的变量共用同一块内存空间。

如果需要沟通,可添加微信公众号找我免费答疑 4471

从XSA到Linux应用:Petalinux与Vitis的嵌入式开发全流程解析

本文详细解析了从XSA文件到Linux应用的嵌入式开发全流程,重点介绍了Petalinux与Vitis工具链的使用技巧和实战经验。通过XSA硬件描述、Petalinux工程搭建、系统镜像优化及Vitis开发配置等关键步骤,帮助开发者高效完成ZYNQ平台开发,解决常见问题并提升开发效率。

weixin_29195217的博客 192

C++:引用语法

本文是笔者在C++学习过程中,对引用语法的总结记录,如有不队的地方,欢迎大家指正!

weixin_44751255的博客 1555

工程制图习题集张大庆课后习题答案解析

所以,我想向大家求助,希望能得到一些学习资料、学习方法和学习经验,帮助我更好地理解和掌握这门课程。在寻找学习资料的过程中,我发现了一款叫做资小料的APP,它里面有很多关于工程制图的学习资料,包括视频教程、习题解答和考试真题等。通过使用资小料,我逐渐掌握了工程制图的基本理论和方法,解决了很多学习中遇到的问题。在这里,我想推荐给和我一样在学习《工程制图习题集》这门课的同学们,希望大家也能从这款APP中受益,共同进步。上传者: 『Consentesdei』蒼迷穀。出版社: 清华大学出版社。

weixin_58833001的博客 926

qt下使用grpc编程(2) —— 练手!自己改的一个简单小例子!1

(1)在研究了grpc官方提供的helloworld例程后,自己试着写了个小程序。 (2)编写proto文件。 proto文件用于定义服务和消息,用protobuf的语法编写,protobuf是一种通信协议,详细请百度。下面附上源码: syntax = "proto3"; option java_multiple_files = true; option java_pac

u011099079的博客 3926

C++之引用怎么用

1.引用的概念 引用并不是新定义一个变量,而是给一个已存在的变量取一个别名。编译器并不会为引用变量开辟空间,它和它应用的变量共用一块空间。也就是说引用是同一块变量空间的不同名字。 格式:类型& 引用变量名=引用实体 注意:上面ra的类型还是整形(int),类型并不是int&,对引用进行赋值就是对他引用的实体赋值。 2.引用特性 引用在定义时必须初始化。否则不知道引用的哪一个 #include<iostream> using n...

weixin_57023347的博客 4824

手把手教你用Verilog实现AT24C64的I2C读写(附完整仿真流程)

本文详细介绍了如何使用Verilog HDL设计AT24C64 EEPROM的I2C控制器,并配合ModelSim完成完整的仿真验证流程。内容涵盖I2C协议解析、Verilog状态机设计、AT24C64读写操作实现,以及仿真波形分析和调试技巧,为FPGA开发者提供了一套完整的EEPROM控制解决方案。

3c4x5z6v7b的博客 846

C++ 引用详解

时,myswap2函数的形参x就是主函数中实参a的一个别名,形参y就是主函数中实参b的一个别名,所以在myswap2函数中对形参x和y的任何操作和修改实际上就是对实参a和b的操作和修改。这条语句的意思是把a和b的内存的地址分别传给了myswap函数的形参x和y,所以在函数myswap中修改的数据就是外侧主函数中a和b的数据。,这时候就相当于定义了一个指针常量,指向a的地址,这里const修饰的是指针的指向,说明指针的指向是固定的不可以修改,这也就说明为什么引用不可以更改。值地址传递,形参存入实参的地址;

NuYoaH502329的博客 463

深入探索 SEED-VII:情感脑电图研究的新利器

SEED-VII是上海交通大学最新发布的多模态情感脑电图数据集,在传统EEG数据基础上增加了眼动、生理信号等多维信息,支持更精细的情感识别研究。该数据集提供了丰富的情感维度标注(效价和唤醒度),可用于算法基准测试、跨模态情感融合及个性化模型开发等研究场景。在应用层面,SEED-VII可推动人机交互、心理健康监测、教育娱乐等领域的情感计算技术发展。文章还提供了PyTorch加载该数据集的代码示例,为研究者使用该数据集提供了技术参考。

qq_32516809的博客 1748

ROS局部路径规划器插件teb_local_planner流程梳理(上)

在我之前的文章《ROS导航包Navigation中的 Movebase节点路径规划相关流程梳理》中已经介绍过Move_base节点调用局部路径规划器插件的接口函数是computeVelocityCommands,接下来,我们就从这个函数入手梳理一下teb_local_planner功能包的工作流程。

慕羽★的博客 5165

[C++核心编程-02]----C++引用详解和使用方法分析

C++中的引用是一个别名,可以用来访问已存在的变量或对象,相当于给变量起一个别名。引用在定义时必须初始化,且初始化后不可再绑定其他对象,即引用在声明时被初始化后就不能再改变引用对象。引用使用符号进行声明。a、别名: 引用本质上是对一个已存在对象的别名,可以通过引用来操作原始对象,实现对原始对象的直接改变。b、必须初始化: 定义引用时必须进行初始化,且一旦初始化就不能再绑定其他对象。c、传递和修改函数参数。

一伦明悦的博客 1349

使用mid360运行lio-livox对比fast-lio2

msg_type为激光雷达发出的数据格式,有livox自定义数据类型格式CustomMsg和ros标准的PointCloud2格式,因此首先需要确定激光雷达端配置的是哪种格式。可以从激光雷达的ros驱动中看到驱动端有三种格式可以选,驱动端的数字2对应lio-livox中的1,驱动端的0对应lio-livox的格式0。如果使用的是Ubuntu18.04编译完成后运行直接成功,如果使用20.04运行会报错,需要修改以下源代码。针对livox-mid360 运行lio-livox的一些问题。

z1872385的博客 1231

【c++】cpp之引用

c++中引用知识点

hutaotaotao的博客 1328

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

CPP的引用

CPP的引用,欢迎点赞,互相关照。为了梦想前进。

qq_61273847的博客 1556

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

cpp——引用

引用是什么?

weixin_57525369的博客 3345

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

CPP引用

通过 const 关键字定义常量引用,必须在声明时初始化。上述代码中,10 是一个字面值常量,本身不是变量,不能直接被引用。此时,如果想要修改 a 的值,是不被允许的。会提示表达式必须是可修改的左值。a = 100;常量引用主要用来修饰形参,提高安全性,防止形参改变实参。如下代码,向 test () 函数传入实参变量 a,test () 函数执行之后,输出 a 的值是 100。也就是说函数执行完成后,会对外部的变量 a 产生影响。int a = 10;这里ref是对a的常量引用。

qq_59805046的博客 839

引用 CPP

引用

huiohuoi的博客 1048

cpp中对于引用的使用

C++新增了一种复合类型——引用变量。引用是已定义的变量的别名(另一个名称)。例如,如果将twain作为clement变量的引用,则可以交替使用twain和 clement 来表示该变量。那么,这种别名有何作用呢?是否能帮助那些不知道如何选择变量名的人呢?有可能,但引用变量的主要用途是用作函数的形参。通过将引用变量用作参数,函数将使用原始数据,而不是其副本。这样除指针之外,引用也为函数处理大型结构提供了一种非常方便的途径,同时对于设计类来说,引用也是必不可少的。

Lyajpunov的博客 952

C++中引用与指针的区别_cpp 引用与指针的区别

学过C的朋友应该都知道指针,刚开始学习指针的时候,都会觉得指针很难,学完了指针才发现指针就是保存的地址。引用没有分配内存空间,所以访问函数形参就是访问引用的变量,是直接访问。而指针分配了内存空间用来保存变量的地址,需要通过保存的地址找到指向的变量,是间接访问。而指针在传参的时候,必须传变量的地址过去,否则不能改变变量的值。5、sizeof 引用得到的是所指向的变量(对象)的大小,而sizeof 指针得到的是指针本身的大小。6、引用访问一个变量是直接访问,而指针访问一个变量是间接访问。二、引用与指针的区别。

2401_87555420的博客 445

C++中在一个cpp文件中引用另外一个cpp文件的方法

创建1个func2.cpp 通过include 引入func1.cpp 来使用func1里面的方法(如果有单独的头文件,比如func1.h 可以通过#include“func1.h”)C++中在一个cpp文件中引用另外一个cpp文件 可以通过导入cpp文件或者.h文件来实现,类似python中的import 导入。

小牧在一直在学习,在前进的道路上大家一起学习,进步。 8010

【Cpp】指针与引用

在C语言中,我们对指针的规范并不严谨——我们常常会用void*来传入一个不知道其变量类型的指针,为了兼容CCpp允许这样的语法存在,但是,由于这样的指针不具有安全性,我们无法通过来解引用void*,这就需要用到我们的显式转换。为了方便看指针的引用而不是由一堆组成了参数和参数类型,我们采用引用来让这种写法变得更加简洁;

Mongxin_Chan的博客 1121

c++中一个cpp文件中的类如何引用另一个cpp文件中的类成员变量及方法

A.cpp中引用B.cpp文件中的类BB的成员变量以及方法: 在B.cpp文件中定义一个全局指针 BB *b_ptr; 然后在A.cpp中 声明这个全局指针 extern BB *b_ptr; 就可以使用了! ...

Stephen 1万+

Cpp_引用

1.引用即别名int a = 10; int& b = a; // b引用了a,b是a的别名,b就是a,a就是b /* int b = a; */引用必须做初始化,而且一经初始化其所引用的目标就不能更换。引用对临时变量(匿名对象的作用)任何出现字面值常量、计算表达式、类型转换、函数返回值的场合,都会有临时变量(匿名变量)产生。只能用带有常属性(const)的引用引用这样的临时变量,而且一旦通过引用引

Jerry的专栏 2788

Cpp中的各种引用

引用不能引用数组 引用大小测试 class MyClass { char & a; cha

weixin_43572257的博客 1366

【Cpp】引用的本质

一、什么是引用 引用是C++中的一个新的语言特性,从表面来说,引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样。引用的声明如下: 类型标识符 &引用名 = 目标变量名; 这里面的&不是位运算、不是取地址,而是一个引用的标识符,可以认为是一个“类型标识符 &”类型,类型标识符是指目标变量的类型。如: int a = 10; int &b = ...

baymaxly的博客 843
上一篇: 柔性数组
下一篇: C++引用-指针的应用与常引用
LiBin1103
博客等级 码龄9年 38粉丝 68原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值