当前位置: 首页 > 编程日记 > 正文

取消对 null 指针“l”的引用。_C++中的引用

61ca0034cbb8d59b218a7cf44b41c180.png

当变量声明为引用时,它将成为现有变量的替代名称。通过在声明中添加“&”,可以将变量声明为引用。

#include using namespace std;   int main() {   int x = 10;     // ref is a reference to x.   int& ref = x;     // Value of x is now changed to 20   ref = 20;   cout << "x = " << x << endl ;     // Value of x is now changed to 30   x = 30;   cout << "ref = " << ref << endl ;     return 0; } 

输出:

x = 20ref = 30

应用

1. 修改函数中传递的参数:如果函数收到对变量的引用,则可以修改变量的值。 例如,在以下程序变量中使用引用进行交换。

#include using namespace std;   void swap (int& first, int& second) {     int temp = first;     first = second;     second = temp; }   int main() {     int a = 2, b = 3;     swap( a, b );     cout << a << " " << b;     return 0; } 

输出:

3 2 

2. 避免复制大型结构:想象一个函数必须接收一个大型对象。如果我们不加引用地传递它,就会创建一个新的副本,这会导致CPU时间和内存的浪费。我们可以使用引用来避免这种情况。

struct Student {    string name;    string address;    int rollNo; }   // If we remove & in below function, a new // copy of the student object is created.  // We use const to avoid accidental updates // in the function as the purpose of the function // is to print s only. void print(const Student &s) {     cout << s.name << "  " << s.address << "  " << s.rollNo; } 

3. 在For Each循环中修改所有对象:我们可以使用For Each循环中的引用修改所有元素。

#include   using namespace std;    int main()  {      vector vect{ 10, 20, 30, 40 };        // We can modify elements if we      // use reference     for (int &x : vect)          x = x + 5;       // Printing elements     for (int x : vect)         cout << x << " ";        return 0;  }  

4. 在For-Each循环中避免对象的复制:我们可以在For-Each循环中使用引用,以避免在对象较大时复制单个对象。

#include   using namespace std;    int main()  {      vector vect{"geeksforgeeks practice",                       "geeksforgeeks write",                      "geeksforgeeks ide"};        // We avoid copy of the whole string     // object by using reference.     for (const auto &x : vect)         cout << x << endl;        return 0;  } 

引用与指针

引用和指针都可以用来更改一个函数在另一个函数中的局部变量。当作为参数传递给函数或从函数返回时,它们都还可以用于保存大对象的副本,以提高效率。

尽管有上述相似之处,但引用和指针之间仍存在以下差异。

可以将指针声明为void,但引用永远不能为void。

例如:

int a = 10;void* aa = &a;. //it is validvoid &ar = a; // it is not valid

引用没有指针强大

1)一旦创建了引用,以后就不能使它引用另一个对象;不能重新放置它。这通常是用指针完成的。

2)引用不能为NULL。指针通常被设置为NULL,以指示它们没有指向任何有效的对象。

3)引用必须在声明时进行初始化。指针没有这种限制。

由于上述限制,C++中的引用不能用于实现链接列表,树等数据结构。在Java中,引用没有上述限制,可以用于实现所有数据结构。引用在Java中更强大,这是Java不需要指针的主要原因。

引用更安全,更易于使用

1)更安全:由于必须初始化引用,因此不太可能存在诸如野指针之类的野引用。

2)易于使用:引用不需要解引用运算符即可访问值。它们可以像普通变量一样使用。仅在声明时才需要“&”运算符。另外,对象引用的成员可以使用点运算符('.')访问,这与需要使用箭头运算符(->)访问成员的指针不同。

结合上述原因,在像复制构造函数参数这样的地方不能使用指针,必须使用引用传递副本构造函数中的参数。类似地,必须使用引用来重载某些运算符,例如++。

相关文章:

你没听说过的Go语言惊人优点

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 在这篇文章中&#xff0c;我将讨论为什么你需要尝试一下 Go 语言&#xff0c;以及应该从哪里学起。 Go 语言是可能是最近几年里你经常听人说起的编…

JS document

<!DOCTYPE html> <html><head><meta charset"UTF-8"><title></title></head><body><div id"one">今天下雨</div><table border"1" cellspacing"0" cellpadding"…

python 流写入文件_python文件流操作

博主在学习python时对文件进行操作时经常踩一下坑。所以专门梳理了一下。有问题麻烦指出哈。 python对于文件的操作我们一般是用open&#xff08;&#xff09;。我们根据python的源码可以看出。我们必须要传的参是file即打开文件的URL。同时open方法默认是是r的打开方式即只读。…

使用 Python 从零开始开发区块链应用程序

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 “区块链”是什么&#xff1f; 区块链是一种存储数字数据的方式。数据可以是任何内容。对于比特币&#xff0c;它是事务&#xff08;在帐户之间转移…

Mybatis学习记录-使用问题总结之一DISTINCT

问题1&#xff1a;手动修改的查询语句&#xff0c;放入到项目中后显示结果和实际查询结果不一致 由于实际情况中用的了分页功能&#xff0c;导致最终的语句在查询完成后&#xff0c;添加了分页项&#xff0c;即如下代码。 ROW_NUMBER() OVER ( ORDER BY COLUMNS) PAGE_ROW_NUMB…

python xlrd读取excel所有数据_python读取excel进行遍历/xlrd模块操作

我就废话不多说了&#xff0c;大家还是直接看代码吧~ #!/usr/bin/env python # -*- coding: utf-8 -*- import csv import xlrd import xlwt def handler_excel(filenamer/Users/zongyang.yu/horizon/ops_platform/assets/upload/1.xlsl): # 打开文件 workbook xlrd.open_work…

【NOIP2015提高组Day1】 神奇的幻方

【问题描述】 幻方是一种很神奇的 N*N矩阵&#xff1a;它由数字1,2,3, … … ,N*N 构成&#xff0c;且每行、每列及两条对角线上的数字之和都相同。 当N为奇数时&#xff0c;我们可以通过以下方法构建一个幻方&#xff1a; 首先将1写在第一行的中间。 之后&#xff0c;按如下…

40行python开发一个区块链

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 尽管有人认为区块链目前还是个不成熟的解决方案&#xff0c;但它无疑称得上是计算机发展历史上的一个奇迹。但是&#xff0c;到底区块链是什么呢?…

网络实验的背景流

在最近做的网络实验中&#xff0c;发现背景流必须要先于实验流开始&#xff0c;并且要长于实验流的时间&#xff0c;这样才能看出实验流的规律。如果背景流后发于实验流&#xff0c;就会变成竞争模式&#xff0c;实验流就会被抢占或者挤压。转载于:https://www.cnblogs.com/fen…

python捕获异常后处理_python异常捕获处理

一、异常处理 在程序运行过程中&#xff0c;总会遇到各种各样的错误。程序一旦出错就停止运行了&#xff0c;此时就需要捕捉异常&#xff0c;通过捕捉到的异常&#xff0c;我们再去做对应的处理 写一个函数&#xff0c;实现除法运算 def calc(a,b): return a/b print(calc(5,1)…

《JS权威指南学习总结--第十一章子集和扩展》

js子集和扩展&#xff1a;http://www.cnblogs.com/ahthw/p/4298449.html ES6新增let和const关键字&#xff1a;http://www.cnblogs.com/telnetzhang/p/5639949.html JS中 var 和 let 关键字的区别&#xff1a;http://www.w3cfuns.com/notes/21400/891cac0f6bff2d7f25d3084618e8…

最常见的 35 个 Python 面试题及答案

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 作为一个 Python 新手&#xff0c;你必须熟悉基础知识。在本文中我们将讨论一些 Python 面试的基础问题和高级问题以及答案&#xff0c;以帮助你完…

PHP 中日期时间函数 date() 用法总结

[导读] date()是我们常用的一个日期时间函数&#xff0c;下面我来总结一下关于date()函数的各种形式的用法&#xff0c;有需要学习的朋友可参考。格式化日期date() 函数的第一个参数规定了如何格式化日期 时间。它使用字母来表示日期和时间 格式化日期date() 函数的第一个参数规…

mac mysql的安装

mac是重装的系统&#xff0c;很干净&#xff0c;没有xmpp等组合的服务器。 1. 安装mysql server https://dev.mysql.com/downloads/mysql/ 这里是官网地址&#xff0c;选择需要的版本下载&#xff0c;我下载的是第一个dmg的&#xff0c;进入后&#xff0c;会让登陆或注册&#…

windows系统和linux系统可以使用相同的js代码吗_「React 手册 」在 Windows 下使用 React , 你需要注意这些问题...

大家好&#xff0c;本篇内容&#xff0c;我要和大家聊聊使用 Windows 开发 React &#xff0c;你需要注意的一些问题。首先说明下&#xff0c;我不是使用 windows 进行开发&#xff0c;因为其配置开发环境来说不是特别方便&#xff0c;我更喜欢 苹果mac 或者乌班图这样的系统&a…

以太坊:比特币 + 无限可能

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 还记你得刚学编程时&#xff0c;第一次使用“对象”的感觉吗&#xff1f;还记你第一次尝试函数式编程的样子吗&#xff1f;这些编程范式&#xff0…

thinkphp5内置标签

thinkphp5内置标签 知道内置标签怎么用&#xff0c;查手册的时候好查 却功能的时候在里面找着来用 内置标签一览 1 内置标签2 3 变量输出使用普通标签就足够了&#xff0c;但是要完成其他的控制、循环和判断功能&#xff0c;就需要借助模板引擎的标签库4 功能了&#xff0c;系统…

python可视化窗口制作一个摇骰子游戏_使用python制作一个抽奖小游戏——骰子游戏...

1.模拟真实环境掷骰子 从Python标准库中调用模块&#xff1a;random——random中包含以各种方式生成随机数的函数 从random中引用randint这一函数——骰子都是有固定面数 from random import randint **2. **创建Die类**** 骰子属性sides&#xff08;面数&#xff09;默认为6面…

C#拾遗(一、基本类型)

1. C#是一种块结构语言&#xff0c;用花括号{}分块&#xff0c;但是用#region和#endregion来定义可以展开和折叠的代码区域 #region 这是引用区 using System; ...... #endregion 2. C#简单类型都是小写&#xff0c;bool,string类型要区别于Java的写法&#xff1b;float、decim…

我不喜欢Go语言的十个理由

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 Go 语言有多火爆&#xff1f;国外如 Google、AWS、Cloudflare、CoreOS 等&#xff0c;国内如七牛、阿里、知乎等都已经开始大规模使用 Go 语言开发…

写扩展性好的代码:函数

http://blog.jobbole.com/107442/转载于:https://www.cnblogs.com/answercard/p/8862006.html

PHP学习笔记:万能随机字符串生成函数(已经封装好)

做验证码用到的&#xff0c;然后就把这个函数封装起来&#xff0c;使用时候要设置2个参数&#xff1a; $str设置里要被采集的字符串&#xff0c;比如&#xff1a; $strefasfgzsrhftjxjxjhsrth; 则在函数里面生成的字符串就回从efasfgzsrhftjxjxjhsrth里面随机抓取&#xff1b; …

python中getopt函数_python getopt模块详解

getopt这个函数 就是用来抽取 sys.argv 获得的用户输入来确定执行步骤。 getopt是个模块&#xff0c;而这个模块里面又有getopt 函数&#xff0c;所以getopt需要这样这样用。 getopt.getopt( [命令行参数列表], "短选项", [长选项列表] ) 该函数返回两个值. opts 和a…

Go语言的前景分析

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 抓住时代的趋势 在上篇文章中&#xff0c;也就是那个跨维度的打击&#xff0c;是可以直接秒杀的中&#xff0c;提到这个时代的问题&#xff0c;这次…

SQL获取当月天数的几种方法

SQL获取当月天数的几种方法 原文:SQL获取当月天数的几种方法 日期直接减去int类型的数字 等于 DATEADD(DAY,- 数字,日期) 下面三种方法&#xff1a; 1&#xff0c;日期加一个月减去当前天数&#xff0c;相当于这个月最后一天的日期。然后获取天数。&#xff08;注意&#xff0c…

移动端zepot媒体查询media queries

使用zepot做轮播图<head> <meta charset"utf-8"> <meta name"viewport" content"widthdevice-width, user-scalableno, initial-scale1.0, maximum-scale1.0, minimum-scale1.0"> <title>jd首页</title> <link…

前端try catch是如何捕获异常的_一文告诉你如何优雅处理前端异常?

前端一直是距离用户最近的一层&#xff0c;随着产品的日益完善&#xff0c;我们会更加注重用户体验&#xff0c;而前端异常却如鲠在喉&#xff0c;甚是烦人。一、为什么要处理异常&#xff1f;异常是不可控的&#xff0c;会影响最终的呈现结果&#xff0c;但是我们有充分的理由…

区块链热度不断,那么究竟是泡沫还是未来?

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 区块链究竟是泡沫还是未来&#xff0c;需要落脚到实际运用中去判断。区块链区别于传统服务器&#xff0c;其宗旨不是为现实世界带来某个特定的产品&…

集成 Kendo UI for Angular 2 控件

伴随着 Angular 2 的正式 release&#xff0c;Kendo UI for Angular 2 的第一批控件已经发布了&#xff0c;当前是 Beta 版本&#xff0c;免费使用。 官方站点&#xff1a;Kendo UI for Angular 2 Kendo UI for Angular 被打包成独立的多个 NPM package&#xff0c;在 Progres…

按钮垂直居中_带下拉按钮的动态图表

小伙伴们好啊&#xff0c;今天和大家一起分享一个图表制作的技巧&#xff0c;先来看看效果&#xff1a;这个图表里&#xff0c;其实有三个数据系列&#xff0c;分别是一深一浅两个颜色的条形图&#xff0c;再就是大大的圆圈儿&#xff0c;其实是用散点图模拟出来的。先来看数据…