博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
NULL和nullptr的区别
阅读量:3706 次
发布时间:2019-05-21

本文共 1205 字,大约阅读时间需要 4 分钟。

NULL是0

nullptr是空指针void

  • 看例子:
#include 
void go(int num){ std::cout << "go num" << std::endl;}void go(char *p){ std::cout << "go p" << std::endl;}void main(){ void *p = NULL; go(p);//error C2665: “go”: 2 个重载中没有一个可以转换所有参数类型}

在看例子就比较清晰了:

void go(int num){    std::cout << "go num" << std::endl;}void go(void *p){    std::cout << "go p" << std::endl;}int main(){    void *p = NULL;    go(p);//go p    go(NULL);//go num    go(nullptr);//go p    system("pause");    return -1;}

结果:

在这里插入图片描述

细节:

1)在c语言中NULL代表空指针。

例如:int *i = NULL;

#define NULL ((void*)0) 意思是NULL是void*指针,给int i 赋值的时候隐式转换为相应类型的指针,但是如果换成c++编译器编译的时候会出错,以为c++是强类型的,void 不能隐式转换为其他类型。一般的NULL定义的头文件为:

/* Define NULL pointer value /

#ifndef NULL
#ifdef __cplusplus
#define NULL 0
#else /
__cplusplus */
#define NULL ((void )0)
#endif /
__cplusplus /
#endif /
NULL */

2)c++中 NULL代表0

c++ 中有函数重载的概念,会导致调用二义性。如

void bar(sometype1 a, sometype2 *b);

void bar(sometype1 a, int i);

bar(a,NULL)

  • 答案是 调用第二个!!!!!!
    调用代码也很快可能忽略过去了,因为我们用的是NULL空指针啊,应该是调用的void bar(sometype1 a, sometype2 *b)这个重载函数啊。实际上NULL在C++中就是0,写NULL这个反而会让你没那么警觉,因为NULL不够“明显”,而这里如果是使用0来表示空指针,那就会够“明显”,因为0是空指针,它更是一个整形常量。

在C++中,使用0来做为空指针会比使用NULL来做空指针会让你更加警觉。

3)c++11中的nullptr

用nullptr来表示空指针

转载地址:http://iuzjn.baihongyu.com/

你可能感兴趣的文章
自动提取人脸关键特征点
查看>>
图像处理与识别学习小结
查看>>
如何用OpenCV训练自己的分类器
查看>>
寄存器PLC地址与寄存器modbus协议地址
查看>>
Modbus学习总结
查看>>
图象处理中的边缘检测------canny算子
查看>>
OCR 脱机手写汉字识别与印刷汉字识别
查看>>
OpenCV形态学操作
查看>>
网页Web上调用本地应用程序( exe)
查看>>
Eclipse下NDK开发与调试
查看>>
Olivetti PR2/PR2E 打印机故障分析与排除
查看>>
几种图像处理库的研究
查看>>
图象的骨架提取算法
查看>>
NAT原理与NAT穿透
查看>>
C语言——学生成绩管理系统
查看>>
二分法查数字
查看>>
Git的安装和Github的使用
查看>>
C 语言关于函数参数是数组的一个bug
查看>>
五子棋
查看>>
用栈实现10进制转换为8进制
查看>>