Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >空指针 到底是什么意思?

空指针 到底是什么意思?

作者头像
Power7089
发布于 2020-07-26 12:18:06
发布于 2020-07-26 12:18:06
2.7K00
代码可运行
举报
运行总次数:0
代码可运行

各位,前段时间我们有推文介绍过野指针和悬空指针,那C中还有一个叫做空指针的名词,它究竟是指什么呢,今天就跟大伙聊聊这个空指针。

我们讲,每一种指针类型都有一个特殊值——“空指针”。它与同类型的其他所有指针值都不相同,它“保证与任何对象或函数的指针值都不相等”。也就是说,空指针不会指向任何地方,它不是任何对象或函数的地址。简单点说,一个指针不指向任何数据,我们就称之为空指针,用NULL表示。如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int *p=NULL;

比如我们熟悉的malloc函数,当分配内存失败时就会返回空指针,这是空指针比较典型的用法。这里有一点我们要特别强调:空指针绝对不等同于未初始化的指针。我们前面讲过未初始化的指针通常指的是野指针(关于野指针这里就不再赘述),而空指针可以确保不指向任何对象或函数,而未初始化的指针则可能指向任何地方,这也正是其危害所在。

接下来我们来讲讲NULL,NULL其实是一个宏定义,在头文件中是这样的:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#define NULL ((void*)0)

(void*)0表示把数值 0 强制转换为void*类型,注意是大写的NULL,不是null也不是NUL,null只是普通的标识符,NUL表示的是'\0',是ASCII码表中的第 0 个字符,一般用于字符串的结束标志,而NULL表示的是空指针,可以直接出现在代码中,但NUL不能。

还有一点需要特别说明的是:在源码中用来表示空指针的空指针常量使用整数0,NULL 使 p 指向地址 0,大多数系统中都将 0 作为不被使用的地址,且在很多机器上都在内部釆用所有位都是0的字来表示空指针,但也有系统会使用地址 0,而将 NULL 定义为其他值,所以 NULL 不能说等于0。也就是说定义空指针要写成int *p=NULL而不是int *p=0。

好了,就讲到这里吧,现在你对空指针有更深入的了解了吗?希望对大家有所帮助,感谢耐心阅读!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-02-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员阿甘 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
指针(一)
什么是野指针?野指针就是指针指向的位置是不可知的(随机的、不正确的、没有明确限制的)
DeROy
2020/05/11
5000
C语言中“悬空指针”和“野指针”究竟是什么意思?
各位,提起C语言我们很自然就会想到指针二字,没错,作为C的核心和灵魂,它的地位咱们就不再赘述了,今天我们想跟大家讲的是指针中的两个特有名词:“悬空指针”和“野指针”。
C语言中文社区
2022/05/30
6520
C语言中“悬空指针”和“野指针”究竟是什么意思?
指针常量,常指针,指向常量的常指针(从我大一写的QQ空间迁移过来)
从字面意思可以看出,指针是一个常量,也就是地址不能被修改。 int* const p 特点是指针指向的数值可以改变,然而指针所保存的地址却不可以改变。
砖业洋__
2023/05/06
2700
指针的艺术——指针是什么?
指针是C/C++中非常非常重要的概念,指针可以用于存储内存地址,动态分配内存等。在项目开发中应用比较频繁,可以简化一些程序任务的执行。学会使用指针是作为C++程序猿必备的技能。
鳄鱼儿
2024/11/03
1060
C++ 面试必备:常见 C++ 面试题汇总及详细解析
C++是C的超集,也就是说,C++包括了C的所有基础特性,并且还增加了一些新的特性。下面列举一些C和C++之间的主要区别:
小万哥
2023/03/31
2.3K0
C++ 面试必备:常见 C++ 面试题汇总及详细解析
C++基础闯关100题,你能闯多少?【2021超硬核大厂高频面试题】
今天我整合了2021年100道大厂高频C++基础面试题,里面包含了C++很多基础知识点,干货满满。因内容较多,篇幅较长,所以会分成上下两篇讲解,强烈建议小伙伴们收藏!
Java架构师必看
2021/07/19
2.3K0
C++基础闯关100题,你能闯多少?【2021超硬核大厂高频面试题】
C语言指针详解(文末有福利)
假如我们定义了 char a=’A’ ,当需要使用 ‘A’ 时,除了直接调用变量 a ,还可以定义 char *p=&a ,调用 a 的地址,即指向 a 的指针 p ,变量 a( char 类型)只占了一个字节,指针本身的大小由可寻址的字长来决定,指针 p 占用 4 个字节。
C语言与CPP编程
2020/12/02
5460
C语言指针详解(文末有福利)
抽丝剥茧C语言(中阶)指针+练习
这是C语言最初级的指针,让你对指针有一个了解和初步的运用,并不是C语言的所有指针内容! 本章我们用32位平台做示范。
有礼貌的灰绅士
2023/03/28
3270
抽丝剥茧C语言(中阶)指针+练习
《C++指针“陷阱”:野指针与悬空指针大揭秘》
在 C++编程的世界里,指针是一把锋利的双刃剑。它为我们提供了强大的内存操作能力,但同时也隐藏着许多容易让开发者陷入困境的“陷阱”。其中,野指针和悬空指针就是两个极具迷惑性且危害巨大的问题,今天我们就来深入剖析一下它们到底是什么。
程序员阿伟
2024/12/09
1530
[C++]C++面试知识总结
1.程序运行知识 1.1 内存布局和分配方式 C程序的内存布局如下: 静态存储区:存储全局变量和static变量,通常在程序编译期间已经分配好了。 BSS段:存放未初始化的static变量和全局变量
昊楠Hacking
2018/04/16
1.9K0
[C++]C++面试知识总结
C:野指针介绍(定义、危害、规避)以及野指针与空指针的区分
举个例子:你想去朋友家(访问内存中的数据),但你拿的地址(野指针)是错的,可能是个还没建好的房子的地址,也可能是个已经拆掉的房子的地址,这时候你就找不到朋友家了,还可能会惹出麻烦。
LonlyMay
2024/10/21
2770
C:野指针介绍(定义、危害、规避)以及野指针与空指针的区分
深入浅出C语言指针(基础篇)
在 C 语言中,指针是理解内存管理和数据操作的核心概念。它就像一把钥匙,帮助我们打开数据存储的宝库,实现对数据的灵活访问和操作。本文将带你深入了解指针的奥秘,掌握指针的类型、运算和与数组的关系,并学习如何避免野指针导致的程序错误。
平凡之路.
2024/10/09
3460
深入浅出C语言指针(基础篇)
c专题之指针---野指针和空指针解析
在上一篇c专题指针文章中,我们介绍了什么是指针,文章里面从普通变量进而引出指针的概念,这样对指针的理解有一定的帮助(其实最好的理解,就是要明白硬件里面的内存原理,这是理解指针最好的地方,就好比说会汇编语言的人来去理解指针这里跟不会指针的人去理解,会有很大的差异的,在学汇编的时候,会接触到好多有关计算机里面内存的大话题,这个对于搞汇编的来说,掌握了汇编,对理解指针的原理非常容易;而大部分人(当然也包括我自己),刚开始学指针,是真的非常吃力,学了一阵子,感觉是学会了,但是一段时间没有去接触指针,再次来看指针的话,感觉一脸懵逼,好像没学过一样,不知道大家有没有我这样的经历,哈哈哈;这里指出不是鼓励大家去学花太多时间在汇编上(个人观点,现在出来上班,好少会搞汇编开发,你搞stm32和一些稍微功能强大的芯片,拿汇编去写,那简直不敢想象,而且也没听过谁这样干过),其实还是当你用到的时候再去学,很快上手的,就是有好多汇编指令要记,如果你一遍学一遍用,反而会学的更快,理解的更深,而且现在对理解一些高级芯片里面的启动代码会非常有帮助的)。好了,废话太多,来进入主题!
用户6280468
2022/03/18
1.9K0
c专题之指针---野指针和空指针解析
C语言指针
风中的云彩
2024/11/07
2350
【C语言】关于指针各项细节以及与其他知识点关联
指针是C语言中最强大的特性之一,也是初学者常常感到困难的部分。指针本质上是一个变量,存储的是另一个变量的内存地址。
用户11286421
2024/10/09
1870
C语言中“野指针”、“悬空指针”是什么?
“野指针”(wild pointer):是没有被初始化过的指针,所以不确定指针具体指向。例如以下示例代码:
不脱发的程序猿
2021/05/08
1.6K0
C 语言指针详解
假如我们定义了 char a=’A’ ,当需要使用 ‘A’ 时,除了直接调用变量 a ,还可以定义 char *p=&a ,调用 a 的地址,即指向 a 的指针 p ,变量 a( char 类型)只占了一个字节,指针本身的大小由可寻址的字长来决定,指针 p 占用 4 个字节。
C语言与CPP编程
2020/10/17
2.6K0
C 语言指针详解
C语言之初识指针
在认识指针之前,我们先要了解的是“内存”。 一般在购买电脑的时候,我们会很在意“内存”的大小,一般电脑的“内存”大小有4G、8G或者16G 他们之间的换算方式是:
初阶牛
2023/02/10
3780
C语言之初识指针
内存溢出、内存泄露、野指针、空指针
看到下面代码的情况,如果使用while循环一直调用GetMemory,一直malloc内存,但是没有使用free函数释放内存,会导致最后没有空间分配,产生的这种情况就是内存溢出
opencode
2022/12/26
9190
c++之指针
在32位操作系统下,无论指针数据类型是什么数据类型,都是占4个字节,而在64位操作系统中占8个字节。
西西嘛呦
2020/08/26
5670
相关推荐
指针(一)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验