C++复习 -- 引用

news2025/1/19 23:18:47

引用概念:


引用变量是一个别名,也就是说,它是某个已存在变量的另一个名字。
一旦把引用初始化为某个变量,就可以使用该引用名称或变量名称来指向变量。


思维发散:
在C语言中,一个数据对应一个内存,通过由一个变量名来访问这个内存空间的数据,叫做直接访问,相对直接访问,有个间接访问的说法,叫做指针。
而引用相当于又给这个内存中的数据提供了一个新的变量名,
这个变量名功能比传统变量名更特殊,是直达地址的,后续代码验证!

 和指针的区别:

引用很容易与指针混淆,它们之间有三个主要的不同:


1.不存在空引用。引用必须连接到一块合法的内存。

2.必须初始化,一旦引用被初始化为一个对象,就不能被指向到另一个对象。指针可以在任何时候指向到另一个对象。引用必须在创建时被初始化。指针可以在任何时间被初始化。
3.不可修改,引用确实不是传统意义上的独立变量,它不能“变”嘛


废话少说,放码过来

======================================


case1:  基本的使用

#include <iostream>
using namespace std;
int main ()
{
// 声明简单的变量
int i;
double d;
// 声明引用变量
int& r = i;
double& s = d;
i = 5;
cout << "Value of i : " << i << endl;
cout << "Value of i reference : " << r << endl;
d = 11.7;
cout << "Value of d : " << d << endl;
cout << "Value of d reference : " << s << endl;
return 0;
}

==============================================


case2: 引用实现交换数据 -- 体现地址传递

#include <iostream>
using namespace std;

//void swap(int  a,int b)
//{
//    int tmp =a;
//    a=b;
//    b=tmp;
//    cout<<"函数里:"<<endl;
//    cout<<"a= "<<a<<"  b= "<<b<<endl;
//}

//void swap(int *a,int *b)
//{
//    int tmp =*a;
//    *a=*b;
//    *b=tmp;
//    cout<<"函数里:"<<endl;
//    cout<<"*a= "<<*a<<"  *b= "<<*b<<endl;
//}

void swap(int  &a,int &b) // 这样调用的 &a  --> 直接访问a的地址
{
    int tmp =a;
    a=b;
    b=tmp;
    cout<<"函数里:"<<endl;
    cout<<"a= "<<a<<"  b= "<<b<<endl;
}

int main()
{
int a = 10,b=20;
cout<<"交换前:"<<endl;
cout<<"a= "<<a<<"  b= "<<b<<endl;
swap(a,b);
cout<<"交换后:"<<endl;
cout<<"a= "<<a<<"  b= "<<b<<endl;

return 0;
}

输出结果

第一种交换 -- 值传参

第二种交换 -- 地址传参

第三种交换 -- 传递引用

========================================


case3: 通过引用返回值去修改数组的元素

#include <iostream>

using namespace std;
double arr[] = {11.1,22.2,33.3,654.5,44.9};

double &setValue(int i)
{
    double & ref=arr[i];
    return ref;
}

int main()
{
    setValue(3)=100.1;
    cout << "arr[3]= " <<arr[3]<< endl;
    return 0;
}

当函数返回一个引用时,则返回一个指向返回值的隐式指针。这样,函数就可以放在赋值语句的左边。

=========================

注意: 

当返回一个引用时,要注意被引用的对象不能超出作用域。所以返回一个对局部变量的引用是不合法的,但是,可以返回一个对静态变量的引用。

case:


int& func() {
int q;
//! return q; // 在编译时发生错误
static int x;
return x; // 安全,x 在函数作用域外依然是有效的
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1674197.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Go vs Rust:哪种编程语言更好,为什么?

在开始前我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「C的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#xff01; Go 和 Rust 都是现代编程语言&…

the7主题下载,探索WordPress主题的无限可能

在数字时代&#xff0c;一个出色的网站是任何企业或个人品牌的必备。但在这个竞争激烈的网络世界中&#xff0c;如何让您的网站脱颖而出&#xff1f;答案就是 the7 —— 一款专为创造独特和视觉冲击力强的网站而设计的 WordPress 主题。 1. 无限设计可能性 the7 以其独特的设…

美国站群服务器如何提高企业网站的负载均衡能力?

美国站群服务器如何提高企业网站的负载均衡能力? 美国站群服务器是企业提高网站负载均衡能力的重要工具之一。随着网络流量的增加和用户需求的多样化&#xff0c;如何有效地管理和分配流量成为了企业面临的挑战。通过采用美国站群服务器&#xff0c;企业可以实现流量的智能分…

均线金叉死叉及应用案例

5日均线和10日均线交叉 5日均线和10日均线交叉指的是5日和10日均线的相互交汇,根据5日均线运行方向的不同可以分为两种交叉。一是5日均线向上运行并交叉10日均线,二是5日均线向下运行并交叉10日均线,前面的交叉被称为金叉,后面的交叉被称为死叉。 技能解析: 5日均线和10日均…

企企通:电子半导体行业数字化转型:智慧供应链与协同效率的融合之道

半导体行业是现代科技的基石&#xff0c;它在电子、通信、计算机、汽车、医疗等多个关键领域发挥着至关重要的作用。从智能手机到汽车&#xff0c;从医疗设备到工业自动化&#xff0c;半导体技术的应用无处不在&#xff0c;它不仅推动了技术的创新&#xff0c;还促进了经济的增…

如何快速在线做视频二维码?在线视频生码的3步操作技巧

现在很多人会选择生成二维码的方式来查看视频内容&#xff0c;将视频生成二维码后分享给其他人在手机扫码查看&#xff0c;有利于提升视频内容传播的速度&#xff0c;提高用户获取视频的便捷性。视频二维码有很多的用途可以使用&#xff0c;比如使用教程、个人展示、产品介绍、…

【会议征稿】第四届机器学习与智能系统工程国际学术会议(MLISE 2024, 6/28-30)

第四届机器学习与智能系统工程国际学术会议&#xff08;MLISE 2024)由珠海科技学院主办&#xff0c;并获得多家高校与研究机构共同支持&#xff0c;将于204年6月28-30日在珠海召开。 MLISE将围绕 “机器学习与智能系统工程” 相关领域&#xff0c;为国内外研究人员与学者提供一…

QT的创建,发现编译器有一个黄色三角形感叹号,提示说Cmake配置错误,该怎么办?

确保你安装了Cmake 2.如果你电脑之前已经装了Cmake&#xff0c;那么在qt安装中&#xff0c;即便你选择了Cmake版本&#xff0c;但依旧不会修改电脑的Cmake版本。这时候就会出现黄色箭头。在勾勾的地方会有一个黄色感叹符号&#xff08;我已经解决了&#xff0c;所以没有显示&a…

如何做好图纸加密

在工业设计领域&#xff0c;图纸无疑是企业最宝贵的资产之一&#xff0c;其中包含了大量的创新思想、独特设计和商业秘密。然而&#xff0c;随着信息技术的发展和应用的普及&#xff0c;图纸防泄密工作面临着前所未有的挑战。因此&#xff0c;如何有效地防止图纸泄密&#xff0…

【Linux】Socket网络套接字

文章目录 网络套接字1. 网络编程概念1.1 IP地址和端口号1.2 理解网络字节序1.3 sockaddr结构体 2. 网络编程接口2.1 通用接口socket()bind() 2.2 UDP接口recvfrom()sendto() 2.3 TCP接口listen()accept()connect()recv()/send() 2.4 IP格式转换接口2.5 套接字接口封装 3. 网络通…

EasyNmon服务器性能监控工具环境搭建

一、安装jdk环境 1、看我这篇博客 https://blog.csdn.net/weixin_54542209/article/details/138704468 二、下载最新easyNmon包 1、下载地址 https://github.com/mzky/easyNmon/releases wget https://github.com/mzky/easyNmon/releases/download/v1.9/easyNmon_AMD64.tar.…

ansible利用playbook 部署lamp架构

搭建参考&#xff1a;ansible批量运维管理-CSDN博客 定义ansible主机清单 [rootansible-server ~]# vim /etc/hosts 192.168.200.129 host01 192.168.200.130 host02 [rootansible-server ~]# vim /etc/ansible/hosts [webserver] host01 host02 在ansible端编写index.html…

引用和实体完整性

本文将详细讲解在数据库服务器级具有引用和实体完整性的好处&#xff0c;包括如何在字段中设置默认值、检查约束和引用约束&#xff0c;以及在何时发生约束检查。通过遵循这些指导原则&#xff0c;可以确保数据的一致性和准确性。 1.完整性 完整性指数据库中数据的准确性或正确…

安科瑞为蔚来充换电站数字化运维提供解决方案

2023年12月23日蔚来宣布了一项重要的计划&#xff0c;表示蔚来将在2024年新建1000座换电站&#xff0c;这将使蔚来的换电站总数达到3310座&#xff0c;2025年蔚来将建成覆盖“九纵九横十九大城市群”的高速换电网络&#xff0c;并且全球换电站数量将超过4000座。此外&#xff0…

国内使用 CloudFlare 避坑指南

最近明月收到了不少新手使用 CloudFlare 的求助,发现很多首次使用 CloudFlare 的甚至包括已经在使用 CloudFlare 的站长们对 CloudFlare 的使用有很多的误区,再加上国内简中互联网上有关 CloudFlare 的教程良莠不齐,更是加深了新手使用 CloudFlare 入坑的概率,让一些别有用…

第二证券投资策略|国产人形机器人进展飞速 数据要素万亿蓝海市场启动在即

昨日&#xff0c;A股震荡回调&#xff0c;沪指盘中一度翻红&#xff0c;尾盘再度回落&#xff1b;深证成指、创业板指弱势下探。截至收盘&#xff0c;沪指跌0.21%报3148.02点&#xff0c;深证成指跌0.6%报9673.32点&#xff0c;创业板指跌0.95%报1860.37点&#xff0c;北证50指…

FloodFill算法---BFS

目录 一、前言 二、算法模板套路 2.1 创建所需的全局变量&#xff1a; 2.2 BFS模板&#xff1a; 2.3 细节处理&#xff1a; 三、例题练习 3.1 例题1&#xff1a;图像渲染 3.2 例题2&#xff1a;岛屿数量 3.3 例题3&#xff1a;岛屿的最大面积 3.4 例题4&#xff1a;被…

易康001:易康多尺度分割结果异常

前言 易康是一种在遥感领域常用的数据处理软件&#xff0c;它主要是用于面向对象的分类&#xff0c;涵盖了分割、模糊分类、监督分类等流程。但是在进行多尺度分割时&#xff0c;往往会遇到一些问题&#xff0c;例如下面图片所示&#xff1a; 1 多尺度分割问题 这种问题一般是…

长图拼接技巧大揭秘:轻松实现横向拼接,一键批量处理方法

在数字化时代&#xff0c;我们经常会遇到需要将多张图片拼接成一张长图的情况&#xff0c;无论是用于制作海报、展示报告&#xff0c;还是制作社交媒体上的长图故事&#xff0c;掌握长图拼接的技巧都显得尤为重要。本文将为大家揭秘长图拼接的实用技巧&#xff0c;并介绍办公提…

计算机存储器分级

从需求上讲&#xff0c;我们希望存储器速度快、体积小、能耗低、散热好、断电数据不丢失。但在现实中&#xff0c;我们往往无法把所有需求都实现。 首先来了解一下RAM和ROM的区别&#xff1a; RAM&#xff08;Random Access Memory&#xff09;也叫随机存取存储器&#xff0c;R…