5.3 用缩写“if(p)”检查空指针是否可靠

问题:

用缩写的指针比较“if(p)” 检查空指针是否可靠?

如果空指针的内部表达不是0 会怎么样?

当C 在表达式中要求布尔值时, 如果表达式等于0 则认为该值为假, 否则为真。

换言之, 只要写出if(expr),无论“expr” 是任何表达式, 编译器本质上都会把它当if((expr) != 0)处理。

如果用指针p 代替“expr” 则if(p) 等价于if(p != 0)。

而这是一个比较上下文, 因此编译器可以看出0 实际上是一个空指针常数, 并使用正确的空指针值。

这里没有任何欺骗; 编译器就是这样工作的, 并为、二者生成完全一样的代码。

空指针的内部表达无关紧要。

类似if(p) 这样的“缩写”, 尽管完全合法, 但被一些人认为是不好的风格(另外一些人认为恰恰是好的风格; 参见问题17.8)。

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

已有0条评论

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

添加一条新评论

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

话题作者

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

x

畅学电子网订阅号