空指针

作者: 李佳额 | 来源:发表于2019-10-22 08:47 被阅读0次

李佳

19011210599

转载至https://mp.weixin.qq.com/s/RFxLdTO-iaarloLTCuO3hQ

【嵌牛导读】空指针0和NULL

【嵌牛鼻子】0、NULL

【嵌牛提问】空指针0和NULL有什么用?

【嵌牛正文】

学生:为什么有那么多关于空指针的疑惑?为什么这些问题如此经常地出现呢?

小林:C 程序员传统上喜欢知道很多要知道的还要多关于机器实现的细节。空指针在源码和大多数机器实现中都用零来表示的事实导致了很多无根据的猜测。而预处理宏 (NULL) 的使用又似乎在暗示这个值可能在某个时刻或者在某种怪异的机器上会改变。“if(p == 0)” 这种结构又很容易被误认为在比较之前把 p 转成了整数类型, 而不是把 0 转成了指针类型。最后, 术语 “空” 的几种用法之间的区别又可能被忽视。冲出这些迷惘的一个好办法是想象 C 使用一个关键字 (或许象 Pascal 那样,用 “nil”) 作为空指针常数。编译器要么在源代码没有歧义的时候把 “nil” 转成适当类型的空指针, 或者有歧义的时候发出提示。

现在事实上, C 语言的空指针常数关键字不是 “nil” 而是 “0”, 这在多数情况下都能正常工作, 除了一个未加修饰的“0” 用在非指针上下文的时候, 编译器把它生成整数 0 而不是发出错误信息,如果那个未加修饰的 0 是应该是空指针常数, 那么生成的程序不行。

学生:我很困惑。我就是不能理解这些空指针一类的东西。

小林:有两条简单规则你必须遵循:

1. 当你在源码中需要空指针常数时, 用 “0” 或 “NULL”。

2. 如果在函数调用中 “0” 或 “NULL” 用作参数, 把它转换成被调函数需要的指针类型讨论的其它内容是关于别人的误解, 关于空指针的内部表达 ,和关于函数原型的复杂性的。

相关文章

  • 【Objective-C】09-空指针和野指针

    一、什么是空指针和野指针 1.空指针 1> 没有存储任何内存地址的指针就称为空指针(NULL指针)2> 空指针就是...

  • iOS空指针和野指针

    一、什么是空指针和野指针 1.空指针 1> 没有存储任何内存地址的指针就称为空指针(NULL指针) 2> 空指针就...

  • 空指针、野指针与悬垂指针

    空指针:指针指向的地址为空的指针叫空指针(NULL指针) 野指针:是指向“垃圾”内存(不可用内存)的指针产生原因:...

  • 空指针 野指针与悬垂指针

    一:空指针 指针指向的地址为空的指针叫空指针(NULL指针) 二:野指针 是指向“垃圾”内存(不可用内存)的指针产...

  • 对比解析之EXC_BAD_ACCESS & 空指针 & 野指针

    空指针 * 没有存储任何内存地址的指针就称为空指针(NULL指针); * 空指针就是被赋值为0的指针,在没有被具体...

  • iOS-空指针,野指针,僵尸对象

    浅谈一下空指针,野指针,僵尸对象。 空指针:没有存储任何内存地址的指针,空指针的值是0; 野指针:指针指向的对象已...

  • Java空指针异常:java.lang.NullPointerE

    1.什么是空指针 指针只存在于c语言中,Java中是没有指针的,空指针就是空引用,java空指针异常就是引用本身为...

  • objective-c 空指针和野指针

    1.空指针 1>没有存储任何内存地址的指针就称为空指针(NULL指针) 2>空指针就是赋值为0的指针,在没有被具体...

  • 指针

    空指针 空指针 指向内存中 编号为0的空间 用于初始化 指针变量 空指针指向的内存是不可访问的 野指针 指针变量 ...

  • 野指针与空指针

    空指针 没有存储任何内存地址的指针就称为空指针(NULL指针) 空指针就是被赋值为0的指针,在没有被具体初始化之前...

网友评论

    本文标题:空指针

    本文链接:https://www.haomeiwen.com/subject/pkmfvctx.html