【C++】C++入门 — 指针空值nullptr
C++入门
- 指针空值
指针空值
在良好的C/C++编程习惯中,声明一个变量时最好给该变量一个合适的初始值,否则可能会出现
不可预料的错误,比如未初始化的指针。如果一个指针没有合法的指向,我们基本都是按照如下
方式对其进行初始化:
void TestPtr()
{int* p1 = NULL;int* p2 = 0;// ……
}
NULL 实际是一个宏 ,在传统的C头文件(stddef.h)中,可以看到如下代码:
#ifndef NULL
#ifdef __cplusplus
#define NULL 0 // NULL 实际是 0
#else
#define NULL ((void *)0) //这里 强转为指针类型
#endif
#endif
可以看到,NULL可能被定义为字面常量0,或者被定义为无类型指针(void*)的常量。不论采取何
种定义,在使用空值的指针时,都不可避免的会遇到一些麻烦,比如:
#include<iostream>using namespace std;void func(int ) {cout << "f(int)" << endl;
}void func(int* ) {cout << "f(int*)" << endl;
}
int main() {func(0);func(NULL);//func((int*)NULL);return 0;
}
运行效果是这样的:

必须进行强转
func((int*)NULL);
才会转换为指针。
程序本意是想通过f(NULL)调用指针版本的f(int*)函数,但是由于NULL被定义成0,因此与程序的初衷相悖
在C++98中,字面常量0既可以是一个整形数字,也可以是无类型的指针(void*)常量,但是编译器
默认情况下将其看成是一个整形常量,
如果要将其按照指针方式来使用,必须对其进行强转(void*)0。
注意:
- 在使用nullptr表示指针空值时,不需要包含头文件,因为nullptr是C++11作为新关键字引入的
- 在C++11中,sizeof(nullptr) 与 sizeof((void)0)所占的字节数相同*。
- 为了提高代码的健壮性,在后续表示指针空值时建议最好使用nullptr
相关文章:
【C++】C++入门 — 指针空值nullptr
C入门 指针空值 指针空值 在良好的C/C编程习惯中,声明一个变量时最好给该变量一个合适的初始值,否则可能会出现 不可预料的错误,比如未初始化的指针。如果一个指针没有合法的指向,我们基本都是按照如下 方式对其进行初始化: voi…...
Vue3+Koa2实现图片上传(不再畏惧)
大家好,我是勇宝,一个热爱前端的小学生,年关将至,提前祝大家新年快乐。今天呢,我们就来好好的啃一啃图片上传,从一个前端开发者的角度来探讨一下图片上传前后端到底都做了哪些事情。 文章目录 一、技术摘要…...
wsl-ubuntu 安装 nginx
wsl-ubuntu 安装 nginx 1. 安装 nginx2. 确认 nginx 启动状态3. 重启 nginx4. 停止 nginx 1. 安装 nginx sudo apt install nginx2. 确认 nginx 启动状态 systemctl status nginx3. 重启 nginx systemctl restart nginx4. 停止 nginx systemctl stop nginx完成!…...
重学Ajax
摘要:AJAX是一个在前端的应用非常广泛技术,为什么还要谈它呢?么得办法之前学的不全面,再收拾收拾。水平有限,欢迎指正! AJAX(全称:Asynchronous JavaScript and XML)是一…...
springboot3+vue3支付宝交易案例-结算支付
springboot3vue3支付宝交易案例-结算支付!今天下午整理了一下结算的内容。遇到了很多问题。汇总分享给大家。 第一个问题:支付宝结算后,返回的交易编码,和交易时间,交易状态,都应该使用varchar来存。 第二…...
c语言 ceil() 函数
ceil()是C语言中的一个数学函数,用于向上取整。它的函数原型定义在math.h头文件中。 ceil()函数的作用是返回一个大于或等于给定参数的最小整数值,即将参数向上取整到最接近的整数。返回值的数据类型为double。 以下是ceil()函数的函数原型:…...
virtualBox虚拟机安装ubuntu后的必要配置
1. 使能双向copy 粘贴功能。在device menu的 shared clipboard项, 选bidirectional. 2.启用共享文件夹。 在device 菜单的 shared folder 项配置, (对于日期乱码问题和命令行打不开的问题请见ubuntu18.04安装后时间日期乱码及terminal打不开解决方法_电脑日期变成…...
《Pandas 简易速速上手小册》第6章:Pandas 时间序列分析(2024 最新版)
文章目录 6.1 时间序列数据基础6.1.1 基础知识6.1.2 重点案例:股票市场分析6.1.3 拓展案例一:温度变化分析6.1.4 拓展案例二:电商平台日销售额分析 6.2 日期与时间功能6.2.1 基础知识6.2.2 重点案例:活动日志分析6.2.3 拓展案例一…...
滇西科技师范学院食堂大宗物资采购项目(冰冻制品类)招标公告
滇西科技师范学院食堂大宗物资采购项目(冰冻制品类)招标公告 (招标编号:YDZOH20240158) 项目所在地区:云南省,临沧市,市辖区 一、招标条件 本滇西科技师范学院食堂大宗物资采购项目(冰冻制品类)已由项目审批/核准/备案机关批准,项目资金来源为…...
(2024,SaFaRI,双三上采样和 DFT,空间特征和频率特征)基于扩散模型的图像空间和频率感知恢复方法
Spatial-and-Frequency-aware Restoration method for Images based on Diffusion Models 公和众和号:EDPJ(进 Q 交流群:922230617 或加 VX:CV_EDPJ 进 V 交流群) 目录 0. 摘要 3. 方法 3.1 修改数据保真度 3.2 …...
【Linux】环境基础开发工具的使用之gcc详解(二)
前言:上一篇文章中我们讲解了Linux下的vim和yum的工具的使用,今天我们将在上一次的基础上进一步的讲解开放工具的时候。 💖 博主CSDN主页:卫卫卫的个人主页 💞 👉 专栏分类:Linux的深度刨析 👈 Ὂ…...
go语言-用channel控制goroutine的退出
用channel控制goroutine的退出 本文简要介绍了,如何用channel控制goroutine的退出的基本方法 for-range主动停止goruitine package mainimport ("fmt""sync""time" )/* Go并发编程模型:主动停止goroutine 方法一&#…...
强大的虚拟机Parallels Desktop 19 mac中文激活
Parallels Desktop是一款功能全面、易于使用的虚拟机软件,它为用户提供了在Mac电脑上同时运行多个操作系统的便利。 软件下载:Parallels Desktop 19 mac中文激活版下载 Parallels Desktop 19 mac具有快速启动和关闭虚拟机的能力,让用户能够迅…...
单元测试框架深入(一):单元测试框架深入
一、一个简单的例子 1、引入Maven依赖:JUnit框架和Surefire插件 2.在src/test/java目录下新建名字以“Test”结尾的测试类,并用Test注释测试方法 3.运行单元测试用例 或用mvn命令运行单元测试: 二、单元测试基础之单元测试框架:J…...
苏门X学士常识学习
前言 苏轼(1037年—1101年)是北宋的文坛领袖,很喜欢奖掖后进。其门下最有名的是“苏门四学士”,另外还有“苏门六学士”和“苏门后四学士”之说。 一、苏门四学士 苏轼在《与李昭玘书》中说: 轼蒙庇粗遣࿰…...
MD5算法:高效安全的数据完整性保障
摘要:在数字世界中,确保数据完整性和安全性至关重要。消息摘要算法就是一种用于实现这一目标的常用技术。其中,Message Digest Algorithm 5(MD5)算法因其高效性和安全性而受到广泛关注。本文将详细介绍MD5算法的优缺点…...
JavaScript基础五对象 内置对象 Math.random()
内置对象-生成任意范围随机数 Math.random() 随机数函数, 返回一个0 - 1之间,并且包括0不包括1的随机小数 [0, 1) 如何生成0-10的随机数呢? Math.floor(Math.random() * (10 1)) 放大11倍再向下取整 如何生成5-10的随机数&…...
curl之网络接口
Curl_cftype 连接接口定义 struct Curl_cftype {const char *name; /* name of the filter type */int flags; /* flags of filter type */int log_level; /* log level for such filters */Cu…...
Pytest中doctests的测试方法应用
在 Python 的测试生态中,Pytest 提供了多种灵活且强大的测试工具。其中,doctests 是一种独特而直观的测试方法,通过直接从文档注释中提取和执行测试用例,确保代码示例的正确性。本文将深入介绍 Pytest 中 doctests 的测试方法,包括基本用法和实际案例,以帮助你更好地利用…...
Android 8.1 铃声音量通话音量同步调节
Android 8.1 铃声音量通话音量同步调节 最近收到客户反馈,想要实现铃声音量通话音量同步调节,具体修改参照如下: /frameworks/base/core/java/android/preference/SeekBarVolumizer.java if (defaultUri null) {if (mStreamType AudioMan…...
STM32F429实时IIR滤波避坑指南:arm_biquad_cascade_df1_f32的群延迟与状态缓存管理
STM32F429实时IIR滤波工程实践:群延迟补偿与状态缓存优化策略 在嵌入式信号处理领域,实时滤波是许多应用的核心需求。当我们在STM32F429平台上使用arm_biquad_cascade_df1_f32函数实现IIR滤波时,会遇到两个关键挑战:群延迟对实时性…...
Vivado 2022.2的.xsa文件,真能通吃Petalinux 2019.2到2022.2吗?我的混搭实测记录
Vivado与Petalinux版本混搭实战:打破常规的.xsa文件兼容性探索 在FPGA开发领域,Xilinx工具链的版本匹配一直被视为金科玉律。但当我们手头只有高版本Vivado,却需要兼容旧版Petalinux环境时,是否真的必须严格遵循官方版本对应表&a…...
实战指南:高效部署企业级网络监控系统ElastiFlow的完整方案
实战指南:高效部署企业级网络监控系统ElastiFlow的完整方案 【免费下载链接】elastiflow Network flow analytics (Netflow, sFlow and IPFIX) with the Elastic Stack 项目地址: https://gitcode.com/gh_mirrors/el/elastiflow ElastiFlow是一款基于Elastic…...
OpenClaw Windows一键部署包简体中文版下载
OpenClaw(小龙虾)Windows 一键部署保姆级教程 | 10分钟养出你的数字员工(2026最新版) 前言:2026年爆火的开源AI智能体OpenClaw(昵称小龙虾),GitHub星标超28万,凭“本地运…...
大学英语四级试卷历年真题及答案PDF电子版百度网盘
大学英语四级备考必备历年真题合集(2015年6月-2025年12月),高清 PDF 电子版含完整试卷与详细答案解析,以及配套听力音频,题型齐全答案详实,可下载打印刷题,吃透真题考点,高效冲刺顺利…...
从暗房到云端:一位古籍修复师用Midjourney蓝晒法重制《天工开物》插图的72小时实录(含失败21次原始日志)
更多请点击: https://intelliparadigm.com 第一章:从暗房到云端:一场古籍图像的跨时空显影 在胶片时代,古籍修复师需在幽暗的暗房中,借助红光灯与显影液,一帧一帧唤醒沉睡于纸背的墨痕;而今&am…...
20260518 Swift实验
Swift实验 控制节点新添加一块20GB磁盘 新添磁盘分成两个区,并格式化 分区一:挂载到obs1目录 分区二:挂载到obs2目录 [rootcontroller ~ 11:45:09]# fdisk /dev/sdbWelcome to fdisk (util-linux 2.32.1). Changes will remain in memory onl…...
Navicat Mac终极重置指南:3种简单方法快速恢复试用期
Navicat Mac终极重置指南:3种简单方法快速恢复试用期 【免费下载链接】navicat_reset_mac navicat mac版无限重置试用期脚本 Navicat Mac Version Unlimited Trial Reset Script 项目地址: https://gitcode.com/gh_mirrors/na/navicat_reset_mac 你是否正在使…...
Miniconda虚拟环境配置踩坑实录:从‘CondaHTTPError’到完美隔离环境
Miniconda虚拟环境配置踩坑实录:从‘CondaHTTPError’到完美隔离环境 第一次在终端输入conda create -n myenv python3.8时,满心期待能快速搭建起一个干净的Python工作环境。然而几秒钟后,屏幕上突然跳出的红色报错信息让整个流程戛然而止&a…...
手把手图解:用Wireshark抓个包,带你‘看见’一次IMS注册和SIP会话的全过程
手把手图解:用Wireshark抓个包,带你‘看见’一次IMS注册和SIP会话的全过程 通信工程师的日常工作中,最令人着迷的莫过于将抽象的网络协议转化为可视化的数据流。当终端设备向IMS核心网发起注册并建立语音会话时,背后究竟发生了什么…...
