引用

基于STM32L4XX、HAL库的AD7124-8BCPZ模数转换器ADC驱动程序设计 / 公式: Voltage = (adc_value / (2^23 - 1)) * Vref。// 模式控制位[7:5]=000 (连续转换模式)// 3.2 配置通道0,使其使用AIN0(+)和AIN1(-),并关联到配置0和滤波器0。= 0x14) { // AD7124-8的ID是0x14。// 双极性操作,缓冲AINP/AINN。 阅读详情

引用的概念及用法

引用:给一个已经定义了的变量重新起一个别名。
定义格式:
类型&引用变量名=已定义的变量名

引用原则

  1. 引用必须在定义的时候就给定引用对象,而且一个引用变量只能引用唯一的一个已经定义的变量。
  2. 一个变量可以有多个不同的引用变量。
  3. 引用变量也是变量,也可以被引用。
  4. 不允许创建引用的引用,也不能有指针的引用,不能建立数组的引用。
int a = 10;
int&&b = a;//错误
int& *p=&a;//错误

这里写图片描述

这里写图片描述

引用中的const

我们知道在C语言中const变量不能直接被修改,可以通过指针被修改,这个属性被称之为具有常属性的变量。而在C++中const修饰的数量就是常量。

int a = 10;int&b = a;
int a = 10;const int&b = a;
const int a = 10;const int&b = a;

以上三种均合法

const int a = 10;int&b = a;

const int a;中的a是常量,而定义的引用b是一个变量,不能给常量赋变量值。类似于int a=0;10=a;肯定是错误的语句。

引用这里的的const遵循以下原则

  • 非const变量在被引用时候,可以被const引用变量和非const引用变量引用;而const变量只能被const引用变量引用。

引用做函数参数

  1. 引用作为函数参数会比传值调用更加高效,因为传值存在值拷贝的代价。
  2. 会比传址调用更加安全,因为指针可以指向空,而引用必须有唯一确定的引用对象。
  3. 引用作为函数参数可以改变实例中的参数,因为它是变量的别名,如果不允许改变实例参数,可以在参数列表加const限定。
#include<iostream>

int Add(const int& a, const int& b)
{
	return a + b;
}
int main()
{
	int a = 80;
	int b = 20;
	std::cout<<Add(a, b)<<std::endl;
	system("pause");
}

这里写图片描述

引用做函数返回值

优点:函数结束之后,函数栈帧销毁,而引用变量在堆上申请,采用引用变量做返回值,更加安全。

#include<iostream>

int& Add(int& a, const int& b)
{
	a = a + b;
	return a;
}
int main()
{
	int a = 80;
	int b = 20;
	std::cout<<Add(a, b)<<std::endl;
	system("pause");
}

这里写图片描述

深层次看引用

引用的实质

这里写图片描述
引用和指针的底层实现是一样的,也就是说,定义一个变量a的引用变量b,在底层实际上就是定义了b变量存储了a的地址。而系统知道哪个是引用,哪个是指针,会根据它们各自的性质去执行各自允许执行的操作。

引用和指针的对比

  1. 定义:指针变量的内容是原变量的地址,调用原变量时候需要显示解引用调用;引用变量是原变量的别名引用的行为等同于原变量行为。
  2. 引用只能在变量定义时候初始化一次(从一而终),而指针变量的值可以更改。
  3. 引用必须指向有效的变量,而指针可以是空指针。
  4. sizeof(引用变量)等同于sizeof(原变量);sizeof(指针)是4或者8。
  5. 指针在使用时候,需要注意指针是否为空;释放指针所指向的地址时候,需要置空,否则可能存在野指针问题。
智能体开发套件(ADK)介绍 city } ---") city_normalized = city . lower() . replace(" " , "") # 模拟天气数据库 mock_weather_db = { 阅读详情

相关推荐

从零开始:用Xilinx FPGA实现RISC-V单周期CPU(附完整Verilog代码)

本文详细介绍了如何使用Xilinx FPGA从零开始实现RISC-V单周期CPU,包括开发环境搭建、核心架构设计、Verilog代码实现及功能验证。通过实战指南和完整代码示例,帮助开发者掌握RISC-V CPU设计的关键技术,适用于嵌入式系统和定制化计算场景。

weixin_30664051的博客 547

指针和引用的区别

C++中有几种复合类型,这里介绍引用和指针的区别  引用其实就是变量的别名,并且引用底层就用指针实现的,只不过引用跟初始化的变量已经绑定了,在作用域中不能再改变引用绑定的实体了。 现按条列出指针和引用的区别:  1.引用是变量的别名,在定义的时候必须进行初始化,而指针可以先定义,再进行赋值 int i,&j = i; int &j; //错误!必须初始化! int *j = &i; i

赢在拼搏中 341

GT911触摸驱动避坑指南:从寄存器读取到多点触控处理的5个关键步骤详解

本文深入解析了GT911触摸驱动开发中的关键步骤与常见问题。从硬件初始化、I2C通信建立,到核心寄存器操作、缓冲区状态管理,再到配置表烧录与多点触控数据解析,提供了详尽的避坑指南。文章结合STM32等平台的实战代码,重点阐述了驱动调试中的时序、中断处理和坐标映射等核心要点,帮助开发者高效实现稳定可靠的多点触控功能。

weixin_29189363的博客 676

引用与指针

一、引用的概念及用法 引用:引用不是定义一个新的变量,不开辟内存空间,而是一个变量的别。与原变量的数值,地址相同。对其中任意数值进行操作都会互相影像(值同步)。 用法:类型& 变量名。           变量—-const 引用—–引用不可修改变量,变量修改后,引用变量值改变 const 变量—-引用————错误,编译不通过,变量不可修改,引用也不可修改,不可直接引用 const 变量

wejboke626的博客 219

【可信数据空间-连接器技术架构设计方案】

一句话概括连接器是可信数据空间的“数据保镖”和“外交官”。连接器就是一个部署在你本地的软件代理,它代表你安全地对外提供数据服务,确保在共享数据价值的同时,牢牢守住数据的所有权和控制权。它是实现“数据可用不可见”这一理想的关键技术部件。一个生动的比喻:银行的金库和接待员想象一下,你的数据就是藏在银行金库里的黄金和钞票。金库(你的内部数据库): 绝对安全,外人绝对不能进。接待员(连接器): 坐在银行大厅里,负责与客户打交道。客户向接待员提出请求:“我想取1000元。

u014716614的博客 2270

RISC-V详细介绍

文章目录写在前面什么是RISC-VRISC-V诞生的背景ISA霸权摩尔定律的穷途末路穷困潦倒的学者不断增长的指令数量RISC-V架构设计思想如何设计一个好的ISARISC-V之RV32I四个典型特点RISC-V之乘除法指令指令格式用乘法代替常数除法RISC-V之RV64RISC-V的特权架构机器模式监管者模式 写在前面 本文主要基于RISC-V中文手册,其中包括但不限于一些网络的资料。本文版权属于skywf,转载或借用请联系作者。 什么是RISC-V RISC-V(发音为“risk-five”)是一个基于

skywf的博客 3万+

C++引用变量(别名)引起的一个小问题

    引用(别名)是怎么回事,这里不赘述。引用变量初始化后就不能再修改,有一天遇到个有意思的问题,大致如下: class A { public:     A(){ m_AID = 0; }     virtual ~A(){}     int m_AID; }; class B : public A { public:     B() : A(), m_BID(m_AID){}       ...

watersoft的专栏 408

Docker 实战:使用 Docker Desktop 在 MacOS 上安装 Docker

在这采用 Docker Desktop 在 Mac 上来安装 Docker。Docker Desktop 是 Docker 的管理桌面 IDE,提供了一个直观的GUI(图形用户界面),允许您直接在本机上管理容器、应用程序以及镜像。适用于 Mac、Linux 以及 Windows 环境,允许您构建、共享和运行容器化应用程序和微服务。Docker Desktop 可以大大降低在复杂配置上的时间,因此您可以专注于编写代码。它负责端口映射、文件系统问题和其他默认设置,并定期更新 Bug 修复和安全更新。

SmartSi 8008

引用是变量的别名,不是常量的别名

int &amp;a=10;引用是变量的别名,因此声明一个引用的前提是需要先有一个变量,或者说需要一个左值,对引用进行初始化的实质就是给变量起了一个别名。因为a是一个引用,而初始化语句的等号是一个常量,也就是右值,这与引用的要求不符。...

zrh_优快云的博客 1694

打脸来的太快了,又发现一个Trae的宝藏功能--内置浏览器可以指定机型来显示前端界面

今天给大家分享一个Trae的实用功能,就是SOLO模式下内置浏览器可以指定不同的手机、平板机型来查看前端页面显示效果,我感觉这个功能很棒,忍不住就跟大家分享一下。

cpp加油站的专栏 6566

GEE:提取研究区 NDVI/LST/RVI 并进行时间序列线性插值填补缺失像素和Savitsky-Golay(SG)滤波平滑处理

养乐多_本文将介绍使用Landsat数据集,构建时间序列,并使用线性插值算法填补缺失数据,或者去云空洞,并进一步对完整的时间序列数据进行SG滤波处理。

养乐多的博客 3196

C++ 引用是指一个变量的别名,它需要用另一个变量或者对象来初始化自身。

#include <iostream> using namespace std; void change(int &a,int &b); //引用是指一个变量的别名,它需要用另一个变量或者对象来初始化自身。 int main() { std::cout << "Hello World!\r\n"; int z = 5; int &w = z;//用&表示申明一个引用,引用必须在申明时进行初始化 int h = 333; ...

m0_37135980的博客 934

【局部规划模块曲线算法】曲线平滑介绍

本文先对轨迹平滑问题做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章提示:以下是本篇文章正文内容(1)适合给移动机器人运动的路径【满足运动学,高阶平滑】(2)高阶的运动学不能够突变的【至少三阶的加速度不能突变,最好四阶的jerk和五阶的snap也不能突变】(3)在转弯的地方不会停下来(4)加减速均衡,节省能量(5)节省时间的。

qq_35635374的博客 5716

强引用、弱引用、软引用和虚引用

前言 Java执行GC判断对象是否存活有两种方式其中一种是引用计数。 引用计数:Java堆中每一个对象都有一个引用计数属性,引用每新增1次计数加1,引用每释放1次计数减1。 在JDK 1.2以前的版本中,若一个对象不被任何变量引用,那么程序就无法再使用这个对象。也就是说,只有对象处于(reachable)可达状态,程序才能使用它。 从JDK 1.2版本开始,对象的引用被划分为4种级别,从而使程序能更加灵活地控制对象的生命周期。这4种级别由高到低依次为:强引用、软引用、弱引用和虚引用。 1. 强

傅红雪的专栏 3540

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

强引用、弱引用、软引用、虚引用

Java中4种引用的级别和强度由高到低依次为:强引用 -> 软引用 -> 弱引用 -> 虚引用当垃圾回收器回收时,某些对象会被回收,某些不会被回收。垃圾回收器会从根对象Object来标记存活的对象,然后将某些不可达的对象和一些引用的对象进行回收。引用类型被垃圾回收时间用途生存时间强引用从来不会对象的一般状态JVM停止运行时终止软引用当内存不足时对象缓存内存不足时终止弱引用正常垃圾回收时对象缓存垃圾回收后终止虚引用正常垃圾回收时跟踪对象的垃圾回收垃圾回收后终止。

m0_74267125的博客 1672

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

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

什么是强引用,软引用,弱引用,虚引用

强引用,软引用,弱引用,虚引用 强引用指的是代码中普遍存在的Object obj=new Object()这类的引用,只要强引用存在,垃圾收集器就不会回收被引用的对象, 软引用,有些有用但是并非必须的对象,在系统将要发生内存溢出之前,会把这些对象列进回收范围内进行二次回收,如果这次回收还是没有足够的内存将会抛出内存溢出异常,java中的softRefence表示软引用 public class ...

qq_41174684的博客 4143

强引用,软引用,弱引用,虚引用

与强引用、软引用和弱引用不同,虚引用并不能通过引用来获取对象的实例。如果一个对象只有弱引用,并且没有任何强引用指向它,那么在下一次垃圾回收时,垃圾回收器会将其标记为可回收,并在适当的时候进行回收。如果一个对象只有软引用,并且没有任何强引用指向它,那么在内存不足时,垃圾回收器可能会回收这个对象,以腾出更多的内存空间。如果只有弱引用指向一个对象,并且没有其他强引用指向它,那么在垃圾回收时,即使内存充足,垃圾回收器也可能回收该对象。当一个对象只有弱引用时,垃圾回收器在下一次进行垃圾回收时就可能会回收这个对象。

cang_ling的博客 1362

符号引用和直接引用、强引用、软引用、弱引用、虚引用

符号引用和直接引用、强引用、软引用、弱引用、虚引用

qq_73181349的博客 794

谈谈强引用、软引用、弱引用、虚引用、引用队列、WeakHashMap

从JDK1.2版本开始,把对象的引用分为四种级别,从而使程序能更加灵活的控制对象的生命周期。这四种级别由高到低依次为:强引用、软引用、弱引用和虚引用。Java中提供这四种引用类型主要有两个目的:第一是可以让程序员通过代码的方式决定某些对象的生命周期;第二是有利于JVM进行垃圾回收。

m0_60907200的博客 1159

Java 强引用、弱引用、软引用、虚引用

1、强引用(StrongReference) 强引用是使用最普遍的引用。如果一个对象具有强引用,那垃圾回收器绝不会回收它。如下: Object o=new Object(); // 强引用 当内存空间不足,Java虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,也不会靠随意回收具有强引用的对象来解决内存不足的问题。如果不使用时,要...

believe_s的博客 1205

强引用、软引用、弱引用、虚引用、终结器引用

目录 一、概述 二、强引用 - 不回收 三、软引用 - 内存不足即回收 四、弱引用 - 发现即回收 五、虚引用 - 对象回收跟踪 六、终结器引用 一、概述 我们希望能描述这样一类对象:当内存空间还足够时,则保留在内存中;如果内存空间在进行垃圾收集后还是很紧张,则可以抛弃这些对象。 【既偏门又非常高频的面试题】强引用、软引用、弱引用、虚引用有什么区别?具体使用场景是什么? 在JDK1.2版之后,Java对引用的概念进行了扩充,将引用分为: 强引用(Strong Reference) 软引

weixiaohuai的博客 1060

强引用、软引用、弱引用、虚引用、引用队列

引用强度从高到低的顺序:强引用、软引用、弱引用、虚引用。 1、强引用 强引用就是我们平常最多使用的引用方式,比如 Student a = new Student(); Student b = a; 这两种形式都是强引用。 如果一个对象上有强引用,则垃圾回收器不会回收它,即便内存不足并抛出空间不足异常,也不会回收它。 要让垃圾回收器回收它的话,就令强引用 = null,比如 a = null,等同于让一个对象(假设对象只有一个强引用)没有了任何引用。 2、软引用 和 引用队列 SoftRef...

dgh112233的博客 962

强引用、软引用、弱引用、虚引用

在Java中,虽然不需要程序员手动去管理对象的生命周期,但是如果希望某些对象具备一定的生命周期的话(比如内存不足时JVM就会自动回收某些对象从而避免OutOfMemory的错误)就需要用到软引用和弱引用了。   从Java SE2开始,就提供了四种类型的引用:强引用、软引用、弱引用和虚引用。Java中提供这四种引用类型主要有两个目的:第一是可以让程序员通过代码的方式决定某些对象的生命周期;第二是有

孟庆云的博客 838

四大引用——强引用、软引用、弱引用、虚引用

强引用、软引用、弱引用、虚引用强引用软引用弱引用虚引用 在JDK 1.2之后,Java对引用的概念进行了扩充,将引用分为强引用(Strong Reference)、软引用(Soft Reference)、弱引用(Weak Reference)、虚引用(Phantom Reference)四种,这四种引用强度依次逐渐减弱。 强引用 就是指在程序代码之中普遍存在的,类似Object obj=new O...

你学废了吗? 711

【JVM】强引用,软引用,弱引用,虚引用分别是什么

我们。

2301_78320637的博客 491
上一篇: C++入门
下一篇: 选择排序和堆排序
平头哥阿威
博客等级 码龄9年 509粉丝 175原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值