当前位置: 首页 > news >正文

C++基础知识学习记录—引用

1、引用的概念

概念:引用相当于给变量取个别名

对引用进行操作与直接操作变量相同,注意引用类型与变量类型一致

#include<iostream>
using namespace std;
int main(){int a=10;int& cite_a = a;//操作引用cite_a 与操作变量a完全一样cout << a << "======" << cite_a << endl;cout << &a << "======" << &cite_a << endl;a++;cout << a << "=======" << cite_a << endl;cite_a =900;cout << a << "======" << cite_a << endl;return 0;
}

2、引用的性质

1、成为一个变量的引用后,就不能称为其他变量的引用

2、引用必须初始化,并且不可以为NULL

3、当作为纯数字的引用时,需要加const修饰,代表其引用的数值不可修改

4、变量的引用如果使用const修饰,此时叫常引用,不能通过引用修改数值,但可以通过原变量修改数值

5、可以使指针指向引用的地址,相当于指向了原变量

6、可以对指针建立引用,此时引用相当于指针的别名

1、性质1:成为一个变量的引用后,就不能成为其他变量的引用 

#include<iostream>
using namespace std;
int main(){int a=10;int & cita_a=a;//引用的性质1:称为一个变量的引用后,就不能称为其他变量的引用int b=90;cite_a = b;//这里是把b的值赋值给了cite_acout << cite_a << "=====" << a << endl;cout << (&cite_a==&a) << "====" << (&cite_a==&b) << endl;// cout << (1==3) << endl;// &cite_a = b;  //错误// int& cite_a =b ;//错误 不允许再次称为其他变量的引用}

2、引用的性质2:引用必须初始化,并且不可以为NULL

#include<iostream>
using namespace std;
int main(){//引用的性质2:声明引用时,必须对其初始化,且不能初始化为NULLint c=90;//int& cite_c;  //报错//int& cite_c = NULL;//报错int& cite_c = c; cout << cite_c << endl;return 0;
}

3、引用的性质3:当作为纯数字的引用时,需要加const修饰,代表其引用的数值不可修改

#include<iostream>
using namespace std;
int main(){//引用的性质3:当作为纯数字引用时,需要加const修饰,代表其引用的数值不可更改// int& cite_a=90;//报错 未加constconst int& a = 3;cout << a << endl;// a++; //报错 引用的数值不可更改return 0;
}

4、引用的性质4:变量的引用如果使用const修饰,此时叫常引用,不能通过引用修改数值,但可以通过原变量修改数值

#include<iostream>
using namespace std;
int main(){//引用的性质4:使用const修饰的引用,叫常引用,常引用不可以通过引用修改数值,但是可以通过原始变量修改数值int a=500;const int& cite_a=a;cout << cite_a << "====" << a << endl;// cite_a++;//报错  const修饰 不能通过引用修改数值a++;//可以通过原始变量修改数值cout << cite_a << "====" << a << endl;return 0;
}

5、引用的性质5:可以使指针指向引用,相当于指向了原变量

#include<iostream>
using namespace std;
int main(){//引用的性质5:可以使指针指向引用,相当于指向了原变量int a=10;int& cite_a = a;int* c = &cite_a;  //c指向a的引用,相当于指向了acout << a << "==" << cite_a << "====" << *c << endl;cout << &a << "====" << &cite_a << "====" << c << endl;return 0;
}

6、引用的性质6:可以对指针建立引用,此时引用相当于指针的别名

#include<iostream>
using namespace std;
int main(){//引用的性质6:可以对指针建立引用,此时引用相当于指针的别名int a=10;int* b = &a;int*& cite_b = b;  //引用cite_b指向指针b,此时cite_b相当于指针b的别名cout << b << "====" << cite_b << "===" << &a << endl;cout << *b << "====" << *cite_b << "====" << a << endl;return 0;
}

引用和指针的区别

1、定义方式不同:引用是一个别名,通过使用&在变量定义时定义;指针是一种数据类型,存储了某一个变量的地址,通过使用*在变量定义时定义。

2、空值:引用在定义的时候必须初始化,并且不能引用空值;指针可以在定义的时候不初始化,也可以指向NULL。

3、可修改性:引用在初始化的时候绑定到一个变量上,不能再绑定到其他变量上;指针可以在任何时候修改指向的变量。

4、空引用和空指针:指针可以为空,但引用不允许为空

5、使用方式:引用在使用的时候可以直接使用,指针通过*,才能获取所指向变量的值

6、空间占用:引用不占用额外的空间,指针需要占用8字节的空间来存储地址

7、引用作为函数参数:引用作为函数参数,传递的是原对象的别名。函数内部对引用

的修改会影响到原对象;指针作为函数参数时,传递的是变量的地址,函数内部对

变量的修改也会影响带函数外部原来的变量。

3、引用的应用

C++中函数参数的传递有三种:

1、值传递:只是实参的拷贝,形参改变不会影响到实参

2、引用传递:不会产生拷贝副本,相当于操控变量本身,形参改变会影响到实参

3、指针传递:是把变量的地址传递给函数,函数内部对变量的修改也会影响带函数外部原来的变量。

 PS:引用传递可以提高参数的传递效率,因为引用传递不需要给形参开辟空间,也不需要为其赋值,可以使用其操作变量。如果只想提取到变量值。可以使用const修饰引用,避免不小心更改到变量的值。

#include <iostream>
using namespace std;void fun(int& num);
int main()
{int c = 100;fun(c);cout << c << endl;return 0;
}
//函数引用传参,可以改变函数外的值
void fun(int& num)
{num=num*2;cout << num << endl;
}

 

相关文章:

C++基础知识学习记录—引用

1、引用的概念 概念&#xff1a;引用相当于给变量取个别名 对引用进行操作与直接操作变量相同&#xff0c;注意引用类型与变量类型一致 #include<iostream> using namespace std; int main(){int a10;int& cite_a a;//操作引用cite_a 与操作变量a完全一样cout &l…...

AWS Savings Plans 监控与分析工具使用指南

一、背景介绍 1.1 什么是 Savings Plans? AWS Savings Plans 是一种灵活的定价模式,通过承诺持续使用一定金额的 AWS 服务来获得折扣价格。它可以帮助用户降低 AWS 使用成本,适用于 EC2、Fargate 和 Lambda 等服务。 1.2 为什么需要监控? 优化成本支出跟踪使用情况评估投…...

【AI学习】关于 DeepSeek-R1的几个流程图

遇见关于DeepSeek-R1的几个流程图&#xff0c;清晰易懂形象直观&#xff0c;记录于此。 流程图一 来自文章《Understanding Reasoning LLMs》&#xff0c; 文章链接&#xff1a;https://magazine.sebastianraschka.com/p/understanding-reasoning-llms?continueFlagaf07b1a0…...

C++ ——从C到C++

1、C的学习方法 &#xff08;1&#xff09;C知识点概念内容比较多&#xff0c;需要反复复习 &#xff08;2&#xff09;偏理论&#xff0c;有的内容不理解&#xff0c;可以先背下来&#xff0c;后续可能会理解更深 &#xff08;3&#xff09;学好编程要多练习&#xff0c;简…...

【图片转换PDF】多个文件夹里图片逐个批量转换成多个pdf软件,子文件夹单独合并转换,子文件夹单独批量转换,基于Py的解决方案

建筑设计公司在项目执行过程中&#xff0c;会产生大量的设计图纸、效果图、实景照片等图片资料。这些资料按照项目名称、阶段、专业等维度存放在多个文件夹和子文件夹中。 操作需求&#xff1a;为了方便内部管理和向客户交付完整的设计方案&#xff0c;公司需要将每个项目文件…...

前端学习之Flex布局

<!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Flex布局示例</title><style>.conta…...

游戏引擎学习第97天

回顾昨天并计划今天 在这期节目中&#xff0c;主要讲解了光照的概念&#xff0c;并进一步讨论了法线贴图光照的实现。节目的内容大致分为几个部分&#xff1a; 光照的基础概述&#xff1a;讨论了光的工作原理以及如何在编程图形时需要考虑光照问题。尽管这些概念并没有深入到…...

Mysql中存储引擎各种介绍以及应用场景、优缺点

概述 MySQL 提供了多种存储引擎&#xff0c;每种引擎有不同的特点和适用场景。以下是几种常见的 MySQL 存储引擎的详细介绍&#xff0c;包括它们的底层工作原理、优缺点&#xff0c;以及为什么 MySQL 默认选择某种引擎。 1. InnoDB 底层工作原理&#xff1a; 事务支持&#…...

PHP 运算符

PHP 运算符 概述 PHP 是一种广泛使用的开源服务器端脚本语言,它具有丰富的运算符集,这些运算符是编写 PHP 程序的基础。运算符用于执行各种数学、逻辑和比较操作。本篇文章将详细介绍 PHP 中常用的运算符,包括算术运算符、比较运算符、逻辑运算符、赋值运算符等。 算术运…...

Vue全流程--Vue3.0与Vue2.0响应式原理对比

Vue2中数据的响应式 需要使用Vue.set这么一个api&#xff0c;修改数据 需要使用Vue.delete这么一个api&#xff0c;删除数据 数据代理这个当面的理解可以看看我前面文章Vue全流程--数据代理的理解以及在Vue中的应用-CSDN博客 Vue3中数据的响应式 Vue3使用proxy这个api实现…...

C语言学习笔记:子函数的调用实现各个位的累加和

在C语言程序学习之初&#xff0c;我们都会学习如何打印 hello world&#xff0c;在学习时我们知道了int main&#xff08;&#xff09;是主函数&#xff0c;程序从main函数开始执行&#xff0c;这是流程控制的一部分内容。在主函数中我们想要实现一些功能&#xff0c;比如求各个…...

【大模型】本地部署DeepSeek-R1:8b大模型及搭建Open-WebUI交互页面

本地部署DeepSeek-R1:8b大模型 一、摘要及版本选择说明1.1 摘要1.2 版本选择 二、下载并安装Ollama三、运行DeepSeek-R1:8b大模型四、安装Open WebUI增强交互体验五、关闭Ollama开机自动启动六、DeepSeek大模型启停步骤 一、摘要及版本选择说明 1.1 摘要 作为一名对 AI 和生成…...

Python 调用 Stabilityai API在本地生成图像

Python 调用 Stabilityai API在本地生成图像 摘要功能 代码结构关键技术代码下载立即体验 摘要 本程序利用硅基流动目前的免费 stabilityai/stable-diffusion-2-1 模型API&#xff0c;生成图像并下载到本地&#xff0c;用户可以通过输入描述性提示词来获取相应的图像。使用Pyt…...

Python3中异常处理:try-finally语句的示例

一. 简介 前面一篇文章简单学习了 try-finally语句结构&#xff0c;执行过程、以及使用场景。文章如下&#xff1a; Python3中异常处理&#xff1a;try-finally语句-CSDN博客 本文写一些简单的示例来继续学习 try-finally语句的使用。 二. Python3中异常处理&#xff1a;try…...

Lua限流器的3种写法

学而不思则罔&#xff0c;思而不学则殆 引言 上篇文章讲解了Lua脚本&#xff0c;事务和Pipline之间的使用方式和性能差距&#xff0c;本篇文章将聚焦Lua脚本&#xff0c;我将用三种写法来展现如何实现一个Redis限流器 固定窗口限流 固定窗口限流也是最简单的限流算法&#x…...

基于 GEE 利用插值方法填补缺失影像

目录 1 完整代码 2 运行结果 利用GEE合成NDVI时&#xff0c;如果研究区较大&#xff0c;一个月的影像覆盖不了整个研究区&#xff0c;就会有缺失的地方&#xff0c;还有就是去云之后&#xff0c;有云量的地区变成空值。 所以今天来用一种插值的方法来填补缺失的影像&#xf…...

linux部署ollama+deepseek+dify

Ollama 下载源码 curl -L https://ollama.com/download/ollama-linux-amd64.tgz -o ollama-linux-amd64.tgz sudo tar -C /usr -xzf ollama-linux-amd64.tgz启动 export OLLAMA_HOST0.0.0.0:11434 ollama serve访问ip:11434看到即成功 Ollama is running 手动安装deepseek…...

在微服务中,如何使用feign在各个微服务中进行远程调用

在微服务中&#xff0c;如何使用feign在不同微服务中进行远程调用 在微服务中&#xff0c;如何使用feign在不同微服务中进行远程调用 步骤&#xff1a; 第一步&#xff1a; 引入feign依赖 <dependency><groupId>org.springframework.cloud</groupId><…...

Kafka中的KRaft算法

我们之前的Kafka值依赖于Zookeeper注册中心来启动的&#xff0c;往里面注册我们节点信息 Kafka是什么时候不依赖Zookeeper节点了 在Kafka2.8.0开始就可以不依赖Zookeeper了 可以用KRaft模式代替Zookeeper管理Kafka集群 KRaft Controller和KRaft Leader的关系 两者关系 Lea…...

vue3 -- 集成 amap(高德地图)

🍍效果 本文介绍了如何在 Vue 3 项目中集成高德地图(AMap),并使用 PoiPicker 实现地点搜索功能。 文章首先通过 AMapLoader 异步加载高德地图 API,并初始化 Map 实例。同时,借助 AMapUI 组件库引入 PoiPicker,绑定搜索输入框,实现地点选择功能。PoiPicker 监听用户的 …...

基于用户的协同过滤算法推荐

import numpy as np 计算用户之间的相似度&#xff08;这里使用余弦相似度&#xff09; def cosine_similarity(user1, user2): numerator np.dot(user1, user2) denominator np.linalg.norm(user1) * np.linalg.norm(user2) return numerator / denominator if denominato…...

4.python+flask+SQLAlchemy+达梦数据库

前提 1.liunx Centos7上通过docker部署了达梦数据库。从达梦官网下载的docker镜像。(可以参考前面的博文) 2.windows上通过下载x86,win64位的达梦数据库,只安装客户端,不安装服务端。从达梦官网下载达梦数据库windows版。(可以参考前面的博文) 这样就可以用windows的达…...

神经网络常见激活函数 4-LeakyReLU函数

文章目录 LeakyReLU函数导函数函数和导函数图像优缺点pytorch中的LeakyReLU函数tensorflow 中的LeakyReLU函数 LeakyReLU LeakyReLU&#xff1a; Leaky Rectified Linear Unit 函数导函数 LeakyReLU函数 L e a k y R e L U { x x > 0 p x x < 0 p ∈ ( 0 , 1 ) \rm …...

PHP盲盒商城系统源码 晒图+免签+短信验证+在线回收 thinkphp框架

源码介绍 PHP盲盒商城系统源码 晒图免签短信验证在线回收 thinkphp框架 源码前端uniapp开发&#xff0c;可以打包成APP&#xff08;非H5封壳&#xff09;H5&#xff0c;接其他平台支付通道&#xff0c;前后端全开源 H5盲盒首页可以直接开盒新UI 修复优化BUG&#xff0c;修复无…...

单例模式详解(Java)

单例模式详解(Java) 一、引言 1.1 概述单例模式的基本概念和重要性 单例模式是一种常用的软件设计模式,它确保一个类在整个应用程序中只有一个实例,并提供一个全局访问点来访问这个唯一实例。这种模式在资源管理、配置设置和日志记录等方面非常有用,因为它们通常只需要…...

2025年度Python最新整理的免费股票数据API接口

在2025年这个充满变革与机遇的年份&#xff0c;随着金融市场的蓬勃发展&#xff0c;量化交易逐渐成为了投资者们追求高效、精准交易的重要手段。而在这个领域中&#xff0c;一个实时、准确、稳定的股票API无疑是每位交易者梦寐以求的工具。 现将200多个实测可用且免费的专业股票…...

2.10学习总结

今天接着看了数据结构&#xff0c;但是跟指针有关的看不懂&#xff08;万恶的指针&#xff09;&#xff0c;写了考试的补题。 #include <stdio.h> #include <stdlib.h> int a[1000005]; int main() {int n,i,x0;scanf("%d",&n);for(i1;i<n;i){x;i…...

原生鸿蒙版小艺APP接入DeepSeek-R1,为HarmonyOS应用开发注入新活力

原生鸿蒙版小艺APP接入DeepSeek-R1&#xff0c;为HarmonyOS应用开发注入新活力 在科技飞速发展的当下&#xff0c;人工智能与操作系统的融合正深刻改变着我们的数字生活。近日&#xff0c;原生鸿蒙版小艺APP成功接入DeepSeek-R1&#xff0c;这一突破性进展不仅为用户带来了更智…...

从Word里面用VBA调用NVIDIA的免费DeepSeekR1

看上去能用而已。 选中的文字作为输入&#xff0c;运行对应的宏即可&#xff1b;会先MSGBOX提示一下&#xff0c;然后相关内容追加到word文档中。 需要自己注册生成好用的apikey Option ExplicitSub DeepSeek()Dim selectedText As StringDim apiKey As StringDim response A…...

【SpringBoot篇】基于Redis分布式锁的 误删问题 和 原子性问题

文章目录 ??Redis的分布式锁??误删问题 ??解决方法??代码实现 ??原子性问题 ??Lua脚本 ?利用Java代码调用Lua脚本改造分布式锁??代码实现 ??Redis的分布式锁 Redis的分布式锁是通过利用Redis的原子操作和特性来实现的。在分布式环境中&#xff0c;多个应用…...