网站首页 > 技术文章 正文
空指针概念
在C语言编程中定义了一个特殊的指针值,它可以确保不会指向这种类型的任何一个对象或者是函数,在源码中用来表示空指针的空指针常量使用整数0。在很多机器上会采用很多位置0 来表示空指针。
空指针和空指针常量
在语言定义中有说明,每一种指针类型都会有一个特殊的指针—空指针,它与同类型的其他指针不同,空指针不会指向任何的地方,它也不是任何对象或函数的地址,我们申请堆空间的时候malloc失败的时候回返回一个空指针,这是他的一个典型用法,表示未分配或者是尚未指向任何地方。我们怎么获取一个空指针呢,根据语言的定义在指针上下文中的“值为0的整型常量表达式”在编译的时候会转换为空指针。
NULL宏
为了让我们程序中的空指针使用更加的明确,特地定义了一个预处理宏NULL,值为空指针常量。
NULL是什么?是怎么定义的?
作为一种编程习惯和风格,很多人不愿意在申请指针变量的时候初始化为0,因为我们的0还会表示成其他的类型,比如整型,浮点型等等,因此未来避免混淆,指针初始化我们就使用NULL,其他的变量我们可以使用0,但是我们要知道在编译器处理的时候会把所有的NULL 还原为0。我们未加修饰的NULL和未加的0是完全等价的。
使用规则
我们使用的时候与要记住两条简单的规则
(1)、在源码中需要使用空指针常量时,用“0”或NULL;
(2)、如果函数调用0或者NULL作为参数,需要把它转换函数所需要的类型。
地址0上有什么?
我们要注意的是我们不能将空指针当做是指向0的指针,但是如果我们访问地址0的时候就需要考虑空指针的影响了。
不管位置0上有什么内容都是和我们机器相关的,我们可以使用一些手段去访问到它,
接下来我说一些自己想到的办法有兴趣的可以去试试。
我们可以把一个指针赋予0。也可以声明一个整型变量,把变量的值赋0,然后再用一个指针指向这个整型,我觉得这样可能会有效。
总结
有关空指针的疑惑如此之多和众多不一样的看法,我可能也没有很好地去描述出来,但是学到关于空指针这块知识点的时候还是比较感兴趣的,所以写了这篇,可能没总结到位,如果你很幸运对指针有很清楚的了解,或者是觉得今天的文章太繁琐,你可以忽略过去。
- 上一篇: 垃圾回收器 G1 详解
- 下一篇: 使用C++编写的整蛊人的程序两例
猜你喜欢
- 2025-01-07 MACD追踪主力!超强MACD,让你一眼看穿主力动向!附指标公式
- 2025-01-07 Hive的10种常用优化总结,再也不怕MapReduce分配不均了
- 2025-01-07 使用C++编写的整蛊人的程序两例
- 2025-01-07 垃圾回收器 G1 详解
- 2025-01-07 盘点c++几种常见的设计模式及具体实现
- 2025-01-07 10问10答:你真的了解线程池吗?
- 2025-01-07 EXPMA选股法
- 2025-01-07 无锁队列的几种实现及其性能对比
- 2025-01-07 满屏红色:C语言中最常见的这些报错,你经历过多少
- 2025-01-07 C语言-NULL、\0、0引发的思考
- 05-15总结雅虎前端性能优化技巧(16条)
- 05-15日常生活中吃雪莲果有养生功效也有危害
- 05-15API 安全之认证鉴权
- 05-15Chaosblade: 阿里一个超级牛逼的混沌实验实施工具
- 05-15膨来仙岛丨搞电竞的都是什么成分?
- 05-15大事全知晓!2022年新闻日历来了!
- 05-15你是有多久没看过麦田圈了?一篇文章全面回顾2015麦田圈季
- 05-15魔兽世界9.1 刻希亚寻找宝箱、稀有WA(转自nga)
- 最近发表
- 标签列表
-
- cmd/c (64)
- c++中::是什么意思 (83)
- 标签用于 (65)
- 主键只能有一个吗 (66)
- c#console.writeline不显示 (75)
- pythoncase语句 (81)
- es6includes (73)
- sqlset (64)
- windowsscripthost (67)
- apt-getinstall-y (86)
- node_modules怎么生成 (76)
- chromepost (65)
- c++int转char (75)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- & (66)
- java (73)
- org.redisson (64)
- js数组插入 (83)
- gormwherein (64)
- linux删除一个文件夹 (65)
- mac安装java (72)
- eacces (67)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)