c语言null和nullptr,nullptr和NULL

c语言null和nullptr,nullptr和NULLnullptr 是 c 11 中的关键字 表示空指针要区分 nullptr 和 NULL 首先要明白 NULL 的含义 NULL 是一个宏定义 在 c 和 c 中的定义不同 c 中 NULL 为 void 0 而 c 中 NULL 为整数 0 C 语言中 NULL 定义 defineNULL void 0 c 语言中 NULL 为 void 类型的指针 但允许将 NULL 定义为 0 c 中 NULL 的定

nullptr是c++11中的关键字,表示空指针

要区分nullptr和NULL,首先要明白NULL的含义:

NULL是一个宏定义,在c和c++中的定义不同,c中NULL为(void*)0,而c++中NULL为整数0

//C语言中NULL定义

#define NULL (void*)0 //c语言中NULL为void类型的指针,但允许将NULL定义为0

//c++中NULL的定义

#ifndef NULL

#ifdef _cpluscplus //用于判定是c++类型还是c类型,详情看上一篇blog

#define NULL 0 //c++中将NULL定义为整数0

#else

#define NULL ((void*)0) //c语言中NULL为void类型的指针

#endif

#endif

所以在c++中int *p=NULL; 实际表示将指针P的值赋为0,而c++中当一个指针的值为0时,认为指针为空指针

然后理解nullptr:

nullptr是一个字面值常量,类型为std::nullptr_t,空指针常数可以转换为任意类型的指针类型。

在c++中(void *)不能转化为任意类型的指针,即 int *p=(void*)是错误的,但int *p=nullptr是正确的,原因

对于函数重载:若c++中 (void *)支持任意类型转换,函数重载时将出现问题下列代码中fun(NULL)将不能判断调用哪个函数

void fun(int i){cout<

void fun(char *p){cout<

int main()

{

fun(NULL); //输出1,c++中NULL为整数0

fun(nullptr);//输出2,nullptr 为空指针常量。是指针类型

}

nullptr和NULL 区别

注:本文内容摘自网络,准确性有待验证,现阶段仅供学习参考.尊重作品作者成果,原文链接 :http://www.2cto.com/kf/201302/190008.html 1.为什要有nullptr …

nullptr与NULL

NULL NULL can be defined as any null pointer constant. Thus existing code can retain definitions of  …

优先选择nullptr而不是0和NULL

我们知道:0是一个int,而不是一个指针.如果C++在一个只有指针才能够使用的上下文中发现它只有一个0,那么它会勉强将0解释成空指针,但那时一种倒退行为.C++的主要方针是0就是一个int,而不是指针 …

item 8: 比起0和NULL更偏爱nullptr

本文翻译自modern effective C++,由于水平有限,故无法保证翻译完全正确,欢迎指出错误.谢谢! 博客已经迁移到这里啦 先让我们看一些概念:字面上的0是一个int,不是一个指针.如果C+ …

Pointer's NULL And 0

问题起源 在使用Qt框架的时候, 经常发现一些构造函数 *parent = 0 这样的代码. 时间长了, 就觉的疑惑了. 一个指针不是等于NULL吗? 这样写, 行得通吗? 自己测试一下就可以了. 测 …

C++11 之 nullptr

C++11 中,nullptr 是空指针,可用来给 (指向任意对象类型的) 指针赋值 广义整型 (integral types) = char, short, int, long, long long …

【C++11新特性】 nullptr关键字

原文链接:http://blog.csdn.net/xiejingfa/article/details/ 熟悉C++的童鞋都知道,为了避免“野指针”(即指针在首次使用之前没有进行初始化 …

C++ 11 nullptr关键字

熟悉C++的童鞋都知道,为了避免“野指针”(即指针在首次使用之前没有进行初始化)的出现,我们声明一个指针后最好马上对其进行初始化操作.如果暂时不明确该指针指向哪个变量,则需要赋予NULL值.除了NUL …

范围for、new内存动态分配、nullptr

一.范围for语句:用于遍历一个序列 ,,,,}; for(auto &x : v) // 省了拷贝的动作,提高了系统效率 { cout << x << endl; } ...

随机推荐

使用ownCloud在Linux安装你的个人云服务

ownCloud是一个免费开源的软件,用于为分享文件,日历,联系人,书签和个人音频/视频.非常容易安装和管理. 前提 在这篇教程里我使用CentOS 6.5 minimal server来安装ownC …

C++对象模型(一):The Semantics of Constructors The Default Constructor (默认构造函数什么时候会被创建出来)

本文是 Inside The C++ Object Model, Chapter 2的部分读书笔记. C++ Annotated Reference Manual中明确告诉我们: default co …

php中的echo 与print 、var_dump 的区别

·  echo – 可以输出一个或多个字符串 ·  print – 只允许输出一个字符串,返回值总为 1 提示:echo 输出的速度比 print 快, echo 没有返回值,print有返回值1. …

【转】Linux下cp: omitting directory `XXX'问题解决

在linux系统中复制文件夹时提示如下: Shell代码 [root@idtp4 site-packages]# /site-packages/ cp: omitting directory ‘yag …

Phone List HDU1671

字典树的包含与不包含关系 #include using namespace std; ][]; ]; ; bool insert1( char *word ) …

Java Spring学习笔记—-Bean的依赖注入(设值注入方式)1

Spring常用的两种依赖注入方式:一种是设值注入方式,利用Bean的setter方法设置Bean的属性值:另一种是构造注入,通过给Bean的构造方法传递参数来实现Bean的属性赋值: 1.设值注入方 …

【读书笔记】iOS-关闭键盘的2种方法

一种是通过使用键盘上的return键关闭键盘,一种是通过触摸背景关闭键盘. 参考资料:

js回车、ESC、F2按钮事件

WPF 中的OpenFileDialog和 OpenFolderDialog

OpenFolderDialog: using (var dialog = new System.Windows.Forms.FolderBrowserDialog() { SelectedPath …

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/223955.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午1:02
下一篇 2026年3月17日 下午1:02


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号