21天学会C++:Day8----范围for与nullptr

news2024/12/23 4:42:30

目录

​编辑

1. 范围for

2. nullptr


1. 范围for

我们在写C语言循环遍历代码的时候,无论是用 for循环,while循环都需要考虑循环的起始条件,循环变量的递增逻辑,循环的结束条件。麻烦不说还可能会出错。

int main()
{
	int arr[] = { 1, 2, 3, 4, 5 };
	for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++)
	{
		cout << arr[i] << " ";
	}
	cout << endl;
}

为了简化单纯做遍历操作时的代码,C++引入了一个名叫范围for的东东,就是一个语法糖。

有了范围for我们遍历arr数组就可以这样书写代码:

int main()
{
	int arr[] = { 1, 2, 3, 4, 5 };
	for (int e : arr)
	{
		cout << e << " ";
	}
	cout << endl;
}

 无论如何是比直接些for循环舒服多了。

我们来看看语法:

for循环后的括号由冒号“ :”分为两部分:第一部分是范围内用于迭代的变量, 第二部分则表示被迭代的范围。

在数组中被迭代的范围就是数组第一个元素到最后一个元素。如果是其他的数据结构,比如stl中的list等等,底层都是使用迭代器来实现的。(迭代器我们后面才会讲解哦,先随便看看吧)

int main()
{
	list<int> l; //双向的链表
	l.push_back(1);
	l.push_back(2);
	l.push_back(3);
	l.push_back(4);
	l.push_back(5);

	for (int e : l)
	{
		cout << e << " ";
	}
	cout << endl;
}

 

范围for括号的最前面是容器里面元素的类型,你如果不想写可以用去偷关键字替代。像下面的代码这样,就更加方便了。

int main()
{
	int arr[] = { 1, 2, 3, 4, 5 };
	for (auto e : arr)
	{
		cout << e << " ";
	}
	cout << endl;
}

2. nullptr

我们思考一下为什么C语言有NULL了,为什么C++还要引入nullptr呢?座位面试的常考题,大家可要仔细想一想。

NULL实际是一个宏,在传统的C头文件(stddef.h)中,可以看到如下代码:

#define NULL ((void *)0)

 他是将0强制转化为了无类型的指针,使得NULL可能存在多种定义!到底是0呢,还是个无类型的指针呢?让我们看看下面的代码:

void f(int)
{
    cout << "f(int)" << endl;
}

void f(int*)
{
    cout << "f(int*)" << endl;
}

int main()
{
    f(0);              //f(int)
    f(NULL);           //f(int)
    f((int*)NULL);     //f(int*)
    return 0;
}

f(NULL)调用的函数是不是很奇怪,我们本来是想让他调用f(int*)的,但是由于NULL的定义导致程序背离了我们的意图。这就是NULL的缺陷。

在C++98中,字面常量0既可以是一个整形数字,也可以是无类型的指针(void*)常量,但是编译器默认情况下 将其看成是一个整形常量,如果要将其按照指针方式来使用,必须对其进行强转(void *)0。

于是C++引入了nullptr关键字,注意是关键字。nullptr是一个空指针类型,仅仅使用nullptr表示空指针。而NULL却可以代表0。

注意:

1. 在使用nullptr表示指针空值时,不需要包含头文件,因为nullptr是C++11作为新关键字引入的。

2. 在C++11中,sizeof(nullptr) 与 sizeof((void*)0)所占的字节数相同。

3. 为了提高代码的健壮性,在后续表示指针空值时建议最好使用nullptr。

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

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

相关文章

2023-09-11 LeetCode每日一题(课程表 III)

2023-09-11每日一题 一、题目编号 630. 课程表 III二、题目链接 点击跳转到题目位置 三、题目描述 这里有 n 门不同的在线课程&#xff0c;按从 1 到 n 编号。给你一个数组 courses &#xff0c;其中 courses[i] [durationi, lastDayi] 表示第 i 门课将会 持续 上 durati…

MySQL版数据库原理与应用期末复习重点(1)---关系代数(除运算和自连接查询、手写例题)

文章目录 一、除运算题目二、自连接查询 一、除运算题目 注&#xff1a;在除运算中就包含了选择和投影运算。 二、自连接查询 注&#xff1a;自连接查询一般很少用到。

引爆效率!新一代搜索引擎软件助您快速获取关键数据

一款突破性的搜索引擎软件&#xff0c;助您轻松检索相关数据 →→MsrayPlus官方网址 您是否曾为从海量信息中筛选出关键数据而烦恼&#xff1f;现在&#xff0c;我们为您推出一款全新的搜索引擎软件&#xff0c;让您从繁杂的搜索结果中快速捕捉所需信息。这款软件拥有三大功…

电脑网络不能用?解决99%的网络连接问题...

公文&#xff1a;网络又不能用了&#xff1f; 检查设备连接 首先&#xff0c;我们需要确保所有的网络设备都正确连接。检查以下几点&#xff1a; 路由器状态&#xff1a;确保路由器的电源开关打开&#xff0c;并且显示灯在正常工作。 网线连接&#xff1a;检查所有网线连接…

.Net MVC 使用Areas后存在相同Controller时报错的解决办法; 从上下文获取请求的Area名及Controller名

先来说个额外的问题&#xff1a;如何在请求上下文&#xff08;比如过滤器的中&#xff09;获取请求对应的Area和Controller 名字&#xff1f;&#xff08;假设请求上下文对象为 filterContext &#xff09;&#xff1a; 1. 获取Area名: (string)filterContext.RouteData.DataTo…

山西3D数字化企业品牌展馆

为持续扩大展览群众性和覆盖面、强化影响力和传播力&#xff0c;让更多群众方便快捷、丰富生动地体验展览&#xff0c;展览办委托中央广播电视总台央视网建设了展览数字化网上展馆&#xff0c;通过网络手段&#xff0c;全要素呈现展览内容&#xff0c;全景式还原现场体验&#…

腾讯云2核4G服务器5M带宽 218元一年 优惠价格明细表

腾讯云2核4G服务器5M带宽可以选择轻量应用服务器或云服务器ECS&#xff0c;轻量2核4G5M带宽服务器218元一年&#xff1a; 腾讯云2核4G服务器5M带宽收费 腾讯云2核4G服务器可以选择轻量应用服务器或者ECS云服务器&#xff0c;云服务器ECS是专业级云服务器&#xff0c;大多数使用…

STM32-HAL库06-硬件IIC驱动FM24CL16B非易失存储器

STM32-HAL库06-IIC驱动FM24CL16B非易失存储器 一、所用材料&#xff1a; STM32VGT6自制控制板 STM32CUBEMX&#xff08;HAL库软件&#xff09; MDK5 二、所学内容&#xff1a; 通过HAL库的硬件IIC对FM24CL16B存储器进行写与读取操作。 三、CUBEMX配置&#xff1a; 第一步…

C++继承相关应用练习

1、 实现一个图形类&#xff08;Shape&#xff09;&#xff0c;包含受保护成员属性&#xff1a;周长、面积&#xff0c; 公共成员函数&#xff1a;特殊成员函数书写 定义一个圆形类&#xff08;Circle&#xff09;&#xff0c;继承自图形类&#xff0c;包含私有属性&#xf…

试试用Markdown来设计表单

相信很多后端开发。对于前端知识是比较零碎的&#xff0c;所以很多时候写表单这样的工作&#xff0c;一般就是复制黏贴&#xff0c;然后改改字段。对于HTML格式&#xff0c;一直觉得比较杂乱&#xff0c;不够简洁。 最近TJ发现了一个有趣的小工具&#xff1a;Create HTML Form…

新手请进,Python是什么,Python简介!

Python 是荷兰人 Guido van Rossum &#xff08;吉多范罗苏姆&#xff0c;中国程序员称其为“龟叔”&#xff09;在 1990 年初开发的一种解释型编程语言。 图1&#xff1a;Python 的标志&#xff08;Logo&#xff09; Python 的诞生是极具戏曲性的&#xff0c;据 Guido 自述记载…

【拼多多API接口开发系列】拼多多商品详情接口:卖家必知的赚钱利器

拼多多&#xff0c;作为中国最大的社交电商之一&#xff0c;为卖家提供了丰富的商品详情接口。这些接口可以帮助卖家快速获取商品信息&#xff0c;提高销售效率。本文将详细介绍如何使用拼多多商品详情接口&#xff0c;以及它的优势和注意事项。 一、拼多多商品详情接口概述 …

LabVIEW以编程方式查找系统中DAQ设备的设备名称

LabVIEW以编程方式查找系统中DAQ设备的设备名称 使用DAQmx VI&#xff0c;“创建虚拟通道”函数&#xff0c;这个函数需要物理通道输入端。当使用相同型号的新设备&#xff08;例如&#xff0c;两个不同的USB-6210&#xff09;运行可执行文件时&#xff0c;代码会中断&#xf…

医院院检验科LIS系统源码 检验申请、标本编号、联机采集、报告单的生成与打印、质控图的绘制和数据的检索与备份

一套符合医院院检验科实际需要的管理系统, 实现检验业务全流程的计算机管理。从检验申请、标本编号、联机采集、中文报告单的生成与打印、质控图的绘制和数据的检索与备份。通过将所有仪器自身提供的端口与科室LIS系统中的工作站点连接,实现与医院HIS系统的联网。 通过门诊医生…

python基于GDAL的多线程高速批量重采样、对齐栅格、对齐行列数,并无损压缩

在自己写代码处理遥感数据进行波段计算&#xff0c;或者基于遥感等空间数据进行机器学习、深度学习时&#xff0c;一般都需要各图层行列数一致。在QGIS中有“对齐栅格”工具可以完成该任务&#xff0c;但是QGIS中没有提供批量操作的接口&#xff0c;在数据比较多时&#xff0c;…

PCL入门(五):随机采样一致性算法RANSAC简单使用

目录 1. 简介2. 简单使用 1. 简介 参考博客《随机抽样一致性&#xff08;RANSAC&#xff09;算法详解》 该算法根据数据集获得满足一定条件的参数估计&#xff0c;实现利用尽可能少的数据获得尽可能大的一致性数据集。具体来说&#xff0c; 步骤1&#xff1a;从数据集中随机…

网页布局常用的8种布局方式

网页布局在整个网页设计中起着至关重要的作用。不同的网页布局设计会产生不同的视觉效果&#xff0c;直接影响浏览者对网页的第一印象。 网页布局在很大程度上决定了网站用户如何与网页内容互动。好的网页设计具有很强的实用性和适应性&#xff0c;所以在布局上要选择合适的设…

论文撰写必备!16个免费查重网站助你成为学术精英

一、引言 初审查重在论文撰写过程中扮演着重要的角色&#xff0c;以下是简要概述初审查重的重要性&#xff1a; 确保原创性&#xff1a;初审查重可以帮助确保你的论文的原创性&#xff0c;并避免抄袭他人的作品。这对于维护学术诚信以及论文的学术价值至关重要。 避免版权侵权&…

从单页面应用角度去解决不跳转页面,也能更改浏览器url地址

正常来说不刷新页面&#xff0c;也能更改浏览器url地址的方法有很多&#xff0c;我们在网上搜的话可以看到有pushState、replaceState、popstate等方法&#xff0c;那还有没有其他方法呢&#xff1f; 答案是有的&#xff01; 最近做一个vue商城项目的时候&#xff0c;用户点击支…

【KingFusion】如何设置日期控件默认选择最近24小时

哈喽&#xff0c;大家好&#xff0c;我是雷工&#xff01; 本篇记录一个日期时间控件的使用过程&#xff0c;以下为应用笔记。 1、问题描述 KingFusion中&#xff0c;对于一些特定的查询情况下&#xff0c;需要设置日期时间控件默认显示前一天的日期时间到当前时间24小时内的…