用缩写的指针比较"if(p)" 检查空指针是否可靠?如果空指针的内部表达不是0会怎么样?


Posted in 面试题 onJanuary 05, 2014
当C 在表达式中要求布尔值时, 如果表达式等于0 则认为该值为假, 否则为真。换言之, 只要写出
if(expr)
无论“expr” 是任何表达式, 编译器本质上都会把它当if((expr) != 0)处理。
如果用指针p 代替“expr” 则if(p) 等价于if(p != 0)。
而这是一个比较上下文, 因此编译器可以看出0 实际上是一个空指针常数, 并使用正确的空指针值。这里没有任何欺骗; 编译器就是这样工作的, 并为、二者生成完全一样的代码。空指针的内部表达无关紧要。
布尔否操作符! 可如下描述:
!expr 本质上等价于(expr)?0:1
或等价于((expr) == 0)
从而得出结论
if(!p) 等价于if(p == 0)
类似if(p) 这样的“缩写”, 尽管完全合法, 但被一些人认为是不好的风格

Tags in this post...

面试题 相关文章推荐
PHP如何删除一个Cookie值
Nov 15 面试题
Java的for语句中break, continue和return的区别
Dec 19 面试题
C语言开发工程师测试题
Dec 20 面试题
为什么如下的代码int a=100,b=100;long int c=a * b;不能工作
Nov 29 面试题
第一范式(1NF)、第二范式(2NF)和第三范式(3NF)之间的区别是什么?
Apr 28 面试题
几道数据库的概念性面试题
May 30 面试题
了解AppleShare protocol(AppleShare协议)吗
Aug 28 面试题
动态密码技术
Oct 18 面试题
linux面试题参考答案(5)
Sep 01 面试题
什么是规则表达式
May 03 面试题
介绍一下RMI的基本概念
Dec 17 面试题
如何用Python来进行查询和替换一个文本字符串
Jan 02 面试题
struct和class的区别
Nov 20 #面试题
利用指针变量实现队列的入队操作
Apr 07 #面试题
怎样在程序里获得一个空指针
Jan 24 #面试题
描述内存分配方式以及它们的区别
Oct 15 #面试题
定义一结构体数组表示分数,并求两个分数相加之和
Jun 11 #面试题
空指针到底是什么
Aug 07 #面试题
C++是不是类型安全的
Feb 18 #面试题
You might like
php通过COM类调用组件的实现代码
2012/01/11 PHP
PHP中函数gzuncompress无法使用的解决方法
2017/03/02 PHP
老生常谈PHP面向对象之注册表模式
2017/05/26 PHP
thinkPHP5框架分页样式类完整示例
2018/09/01 PHP
PHP静态方法和静态属性及常量属性的区别与介绍
2019/03/22 PHP
一个用js实现的页内搜索代码
2007/05/23 Javascript
js同时按下两个方向键
2007/12/01 Javascript
一个分享按钮的插件使用介绍(可扩展,内附开发制作流程)
2011/09/19 Javascript
JavaScript实现输入框(密码框)出现提示语
2016/01/12 Javascript
微信小程序实现tab切换效果
2017/11/21 Javascript
JS中常用的消息框总结
2018/02/24 Javascript
详解VUE中常用的几种import(模块、文件)引入方式
2018/07/03 Javascript
Angular5整合富文本编辑器TinyMCE的方法(汉化+上传)
2020/05/26 Javascript
跟老齐学Python之私有函数和专有方法
2014/10/24 Python
Python数据结构与算法之二叉树结构定义与遍历方法详解
2017/12/12 Python
使用Python进行目录的对比方法
2018/11/01 Python
python3 面向对象__类的内置属性与方法的实例代码
2018/11/09 Python
Python操作配置文件ini的三种方法讲解
2019/02/22 Python
Numpy 中的矩阵求逆实例
2019/08/26 Python
python调用接口的4种方式代码实例
2019/11/19 Python
Python计算公交发车时间的完整代码
2020/02/12 Python
Python多线程操作之互斥锁、递归锁、信号量、事件实例详解
2020/03/24 Python
pytorch加载自己的图像数据集实例
2020/07/07 Python
python Matplotlib模块的使用
2020/09/16 Python
美国知名男士服饰品牌:Brooks Brothers(布克兄弟)
2016/08/25 全球购物
Footshop罗马尼亚:最好的运动鞋选择
2019/09/10 全球购物
Maxpeedingrods美国:高性能汽车零件
2020/02/14 全球购物
土木工程毕业生自荐信
2013/09/21 职场文书
战友聚会策划方案
2014/06/13 职场文书
学校四风问题对照检查材料思想汇报
2014/09/26 职场文书
《三国志》赏析
2019/08/27 职场文书
业余无线电通联Q语
2022/02/18 无线电
Redis 的查询很快的原因解析及Redis 如何保证查询的高效
2022/03/16 Redis
MySQL实现配置主从复制项目实践
2022/03/31 MySQL
【D4DJ】美少女DJ企划 动画将于明年冬季开播第2季
2022/04/11 日漫
深入理解MySQL中MVCC与BufferPool缓存机制
2022/05/25 MySQL