5.9 为什么空指针问题经常地出现?

C 程序员传统上喜欢知道很多(可能比他们需要知道的还要多) 关于机器实现的细节。

空指针在源码和大多数机器实现中都用零来表示的事实导致了很多无根据的猜测。

而预处理宏(NULL) 的使用又似乎在暗示这个值可能在某个时刻或者在某种怪异的机器上会改变。

“if(p == 0)” 这种结构又很容易被误认为在比较之前把p 转成了整数类型, 而不是把0 转成了指针类型。

最后, 术语“空” 的几种用法(如上文问题5.10 所列出的) 之间的区别又可能被忽视。

冲出这些迷惘的一个好办法是想象C 使用一个关键字(或许象Pascal 那样, 用“nil”) 作为空指针常数。

编译器要么在源代码没有歧义的时候把“nil” 转成适 当类型的空指针, 或者有歧义的时候发出提示。

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

永不止步步 发表于01-14 10:25 浏览65535次
分享到:

已有0条评论

暂时还没有回复哟,快来抢沙发吧

添加一条新评论

只有登录用户才能评论,请先登录注册哦!

话题作者

永不止步步
金币:67410个|学分:345377个
立即注册
畅学电子网,带你进入电子开发学习世界
专业电子工程技术学习交流社区,加入畅学一起充电加油吧!

x

畅学电子网订阅号