C++:引用

devtools/2024/11/15 4:24:41/

C++中的引用是一种别名,允许开发者在程序中使用已存在的变量名称来引用另一个变量。引用提供了一种简洁的方法来操作变量,而不需要复制数据本身。引用使用&符号声明,并在初始化时绑定到另一个变量。引用一旦初始化后,就不能再绑定到另一个对象。

引用的基本语法:
type& refName = originalVariable;

其中,type是引用所指向的变量的类型,refName是引用的名称,originalVariable是引用所绑定的原始变量。

int main() {
​int n = 100;int & x = n;
​x = 200;
​std::cout << n << std::endl;std::cout << x << std::endl;
}

在这段代码中,x是一个对n的引用,因此对x的修改实际上就是对n的修改。所以,无论您修改x还是n,都会影响到n的值。

所以,输出将是:

200
200

从内存的角度上进行查看;

最开始n在内存中的地址以及值:

接着运行 int & x = n;x = 200;后,内存中的值为:

在这我们不难发现我们在对引用x进行赋值的时候实际上修改的还是n的地址空间,其实也就是对n的修改。

引用的使用

#include <iostream>
using namespace std;
​
void swap(int& x, int& y) {int temp = x;x = y;y = temp;
}
​
int main() {int a = 200;int b = 300;cout << "Before swapping: a = " << a << ", b = " << b << endl;swap(a, b);cout << "After swapping: a = " << a << ", b = " << b << endl;return 0;
}

swap()函数:这是一个经典的交换两个整数值的函数,使用引用作为参数使得代码更加清晰和简洁。函数内部使用引用来直接访问并修改传入的变量,而不需要使用指针或者通过返回值来实现值的交换。

引用和指针的区别

  1. 语法和操作符

    • 引用使用 & 符号声明,指针使用 * 符号声明。

    • 引用在初始化后不能被重新赋值绑定到另一个变量,而指针可以在运行时改变所指向的对象。

  2. 空值(null)

    • 指针可以是空值(null pointer),即指向空地址的指针。但引用必须始终引用一个已存在的对象,不能指向空值。

  3. 引用是对象别名,而指针是对象的地址

    • 引用是目标变量的别名,对引用的操作等同于对目标变量的操作。指针存储的是目标变量的地址,需要通过解引用操作符 * 来访问目标变量的值。

  4. 空间要求

    • 指针通常需要额外的空间来存储地址值,而引用通常不需要额外的空间,因为引用本质上是目标变量的别名。

  5. 函数参数传递

    • 通过指针传递参数可以在函数内部修改传入的变量的值,而通过引用传递参数也可以实现这一点,但语法上更加简洁。通常来说,引用传递更容易理解和使用。


http://www.ppmy.cn/devtools/4034.html

相关文章

海外住宅IP如何助力国外问卷调查?

在数字化时代&#xff0c;国外问卷调查不仅是了解市场需求的重要手段&#xff0c;还成为了一项能够赚取额外收入的方式。随着全球范围内消费者行为的多样化&#xff0c;各类企业和机构越来越需要了解不同地区的用户观点和偏好&#xff0c;以优化产品和服务。 一、国外问卷调查…

C/C++ C/C++ 入门(6)模板初阶

个人主页&#xff1a;仍有未知等待探索-CSDN博客 专题分栏&#xff1a;C 多多指教&#xff01; 一、泛型编程 在之前&#xff0c;我们进行编程的时候&#xff0c;总是针对于某一个具体的问题。就比如说&#xff0c;如何实现一个int类型的swap函数呢&#xff1f;大家肯定会写。…

关于新版本selenium定位元素报错:‘WebDriver‘ object has no attribute ‘find_element_by_id‘等问题

旧版本模式&#xff1a; # 以下inputTag任选其一&#xff0c;其他注释掉 inputTag driver.find_element_by_id("value") # 利用ID查找inputTags driver.find_element_by_class_name("value") # 利用类名查找inputTag driver.find_element_by_name(&q…

BCLinux8U6系统部署oceanbase分布式数据库社区版之三、分布式数据库部署

本文是在完成步骤一、准备 OBD 中控机&#xff0c;步骤二3台数据库服务器准备后&#xff0c;正式开始oceanbase分布式数据库安装。 前序步骤&#xff1a;BCLinux8U6系统部署oceanbase分布式数据库社区版之一、准备 OBD 中控机 BCLinux8U6系统部署oceanbase分布式数据库社区版…

英伟达一系列高质量公开课来了!

B站&#xff1a;啥都会一点的研究生公众号&#xff1a;啥都会一点的研究生 英伟达免费提供许多自学课程&#xff0c;评价肥肠高&#xff0c;有专为初学者设计的也有更进阶的内容&#xff08;提供证书&#xff09;&#xff0c;若实验室/单位基于NVIDIA Jetson进行开发&#xff…

IPv6改造:反向代理技术的原理和优缺点分析

在前面几篇文章中&#xff0c;我们介绍了目前行业中三种比较常见的IPv6改造技术&#xff0c;分别是隧道技术、双栈技术和翻译技术&#xff0c;这三种改造方式采用不同的技术方案实现了IPv4向IPv6网络的过渡&#xff0c;然而每种改造技术在改造周期和成本、业务连续性、协议兼容…

windows Webrtc +VS2019 (M124)下载编译以及调通测试demo

下载depot tools 设置梯子 git config --global http.proxy 127.0.0.1:10000 git config --global https.proxy 127.0.0.1:10000 下载 $ git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git 设置depot_tools目录为环境变量 下载webrtc # 设置系统代…

Linux环境下安装selenium 和 chromedriver

安装selenium模块 pip3 install selenium安装谷歌浏览器 yum install https://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpm -y安装chromedriver 1&#xff09;运行下面命令查看浏览器版本 google-chrome --version # Google Chrome 123.0.6312.12…