C语言和C++中的空指针区别

这篇具有很好参考价值的文章主要介绍了C语言和C++中的空指针区别。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

C语言中,空指针是NULL,是一个宏

在C++中NULL似乎也可以用,但是C++中的NULL其实是有问题的。C++大佬在设计的时候可能没有考虑全面

在C++98中,字面常量0既可以是一个整形数字,也可以是无类型的指针(void*)常量

但是编译器默认情况下 将其看成是一个整形常量,如果要将其按照指针方式来使用,必须对其进行强转(void *)0。

看一下在C++中NULL的定义

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

可以看到,NULL在C++中其实就是 0

在C语言中才是(void*)0,即空指针

所以C++如果用NULL做空指针,就会出现这种情况

//f函数构成函数重载
void f(int)
{
 	cout<<"f(int)"<<endl;
}
void f(int*)
{
 	cout<<"f(int*)"<<endl;
}

int main()
{
    int* p = NULL;
    f(NULL);//调用 f(int)
    f(0);// 调用f(int)
    f(p);// 调用f(int*)
    
    /* 显然,f(NULL)我们本想调用 f(int*)
    但是却调用成了 f(int) */
    return 0;
}

所以为了补C++的坑,C++11中引入了nullptr作为空指针

注意文章来源地址https://www.toymoban.com/news/detail-824348.html

  1. 在使用nullptr表示指针空值时,不需要包含头文件,因为nullptr是C++11作为新关键字引入的
  2. C++11中,sizeof(nullptr)sizeof((void*)0)所占的字节数相同

到了这里,关于C语言和C++中的空指针区别的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • c语言函数指针和指针函数的区别,以及回调函数的使用。

    函数指针 是什么,函数指针本质也是指针,不过是指向函数的指针,存储的是函数的地址。 指针函数 是什么,指针函数其实就是返回值是指针的函数,本质是函数。 函数指针是如何定义的呢,如下 这里 * pfun 需要 加括号 ,否则定义为了指针函数。 指针函数的定义如下: 下面

    2024年02月11日
    浏览(35)
  • 一个问题来对比文心一言和chatgpt

    问题: 请注意, 孩子不会说话,他无法用语言来回复妈妈的问题, 请生成以下剧本:一个妈妈和一岁不会说话的婴儿的日常vlog的剧本 文心一言 场景一:早晨 (妈妈和孩子在客厅里醒来) 妈妈:早上好,宝贝。 孩子:早上好,妈妈。 妈妈:你昨晚睡得好吗? 孩子:我很

    2024年02月09日
    浏览(33)
  • C++引用的相关定义以及使用场景与指针之前的区别

    🌏博客主页: 主页 🔖系列专栏: C++ ❤️感谢大家点赞👍收藏⭐评论✍️ 😍期待与大家一起进步! 引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间。 引用的特性: 引用在定义时必

    2024年02月03日
    浏览(30)
  • 挖数据平台的空号检测接口:识别实时手机号码中的空号问题

      在当今数字化的时代,手机号码已经成为了人们生活中不可或缺的一部分。然而,随着通信技术的不断发展,以及用户需求的增长,诸如手机号码质量问题的挑战也越来越明显。为了解决这个问题,挖数据平台推出了一项空号检测接口,旨在实时识别并过滤掉手机号码中的

    2024年04月22日
    浏览(23)
  • Python 去除列表中的空值

    要在Python中去除列表中的空值,可以使用以下代码示例。 这段代码定义了一个名为 remove_empty_values 的函数,它接受一个输入列表,并使用列表推导式过滤掉了所有的空值。最后,它返回一个不包含空值的新列表。 补充方法: 使用Python的 filter() 函数,将一个lambda函数应用于原

    2024年02月06日
    浏览(32)
  • Dart 语言的空安全特性

    空安全是Dart 2.12版本新增的一项特性,可以有效地避免空指针异常的出现。事实上,空安全特性并不是Dart独有的,Kotlin、Swift、C#、TypeScript等语言都有此特性。在Dart语音中,空安全支持三条核心原则: • 默认不可空:除非将变量显式声明为可空,否则它默认一定是要是非空

    2024年02月07日
    浏览(21)
  • 【是C++,不是C艹】 引用的概念 | 引用的使用 | 引用与指针的区别

    💞💞 欢迎来到 Claffic 的博客 💞💞   👉  专栏: 《是C++,不是C艹》👈 前言: 前面带大家学习了函数重载等C++基础,这期继续C++基础的学习:引用。 注: 你最好是学完了C语言,并学过一些初阶的数据结构。 (没有目录) ヽ( ̄ω ̄( ̄ω ̄〃)ゝ  不知道大家听没听过这个梗

    2024年02月03日
    浏览(29)
  • C++中的引用及指针变量

    目录 1.1 C++中的引用 1.2 C++中的指针变量(pointer) 1.1 C++中的引用 C++中的引用(reference)是一种特殊的变量,它是某个已存在变量的另一个名字。引用变量与指针变量类似,但引用变量必须在声明时进行初始化,并且一旦引用变量与某个变量关联起来,就无法再与其他变量关

    2024年01月20日
    浏览(32)
  • C++中的智能指针是什么

    C++是一种广泛使用的编程语言,它允许程序员使用动态分配的内存。然而,手动管理内存可能会导致一些严重的问题,如内存泄漏和悬空指针。为了解决这些问题,C++引入了智能指针的概念。智能指针是一种特殊的指针类型,它可以自动管理内存并确保在不需要时释放内存。

    2024年02月02日
    浏览(102)
  • 【C++那些事儿】函数重载与C++中的“指针“——引用

    君兮_的个人主页 即使走的再远,也勿忘启程时的初心 C/C++ 游戏开发 Hello,米娜桑们,这里是君兮_,我之前看过一套书叫做《明朝那些事儿》,把本来枯燥的历史讲的生动有趣。而C++作为一门接近底层的语言,无疑是抽象且难度颇深的。我希望能努力把抽象繁多的知识讲的生

    2024年02月08日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包