用缩写的指针比较"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...

面试题 相关文章推荐
JAVA的事件委托机制和垃圾回收机制
Sep 07 面试题
Java TransactionAPI (JTA) 主要包含几部分
Dec 07 面试题
Java的五个基础面试题
Feb 26 面试题
经典C++面试题一
Nov 06 面试题
Linux的主要特性
Sep 03 面试题
捷科时代的软件测试笔试题
Nov 09 面试题
广州足迹信息技术有限公司Java软件工程师试题
Feb 15 面试题
Ajax请求总共有多少种Callback
Jul 17 面试题
int和Integer有什么区别
May 25 面试题
什么时候用assert
May 08 面试题
排序都有哪几种方法?请列举。用JAVA实现一个快速排序
Feb 16 面试题
95%的面试官都会问到的50道Java线程题,附答案
Aug 03 面试题
struct和class的区别
Nov 20 #面试题
利用指针变量实现队列的入队操作
Apr 07 #面试题
怎样在程序里获得一个空指针
Jan 24 #面试题
描述内存分配方式以及它们的区别
Oct 15 #面试题
定义一结构体数组表示分数,并求两个分数相加之和
Jun 11 #面试题
空指针到底是什么
Aug 07 #面试题
C++是不是类型安全的
Feb 18 #面试题
You might like
PHP读取ACCESS数据到MYSQL的代码
2011/05/11 PHP
PHP 获取文件路径(灵活应用__FILE__)
2013/02/15 PHP
PHP之短标签开启设置
2013/06/17 PHP
php获取发送给用户的header信息的方法
2015/03/16 PHP
php实现读取内存顺序号
2015/03/29 PHP
PHP实现十进制、二进制、八进制和十六进制转换相关函数用法分析
2017/04/25 PHP
ThinkPHP框架实现导出excel数据的方法示例【基于PHPExcel】
2018/05/12 PHP
关于jQuery新的事件绑定机制on()的使用技巧
2013/04/26 Javascript
jQuery遍历Form示例代码
2013/09/03 Javascript
javascript实现全角半角检测的方法
2015/07/23 Javascript
基于jQuery实现仿百度首页换肤背景图片切换代码
2015/08/25 Javascript
详解JS中Array对象扩展与String对象扩展
2016/01/07 Javascript
sencha ext js 6 快速入门(必看)
2016/06/01 Javascript
15款最好的Bootstrap在线编辑器
2016/08/03 Javascript
Vuejs第十一篇组件之slot内容分发实例详解
2016/09/09 Javascript
一句jQuery代码实现返回顶部效果(简单实用)
2016/12/28 Javascript
BootStrap表单验证实例代码
2017/01/13 Javascript
js放大镜放大购物图片效果
2017/01/18 Javascript
js实现图片左右滚动效果
2017/02/27 Javascript
js判断用户是输入的地址请求的路径(实例讲解)
2017/07/18 Javascript
JavaSctit 利用FileReader和滤镜上传图片预览功能
2017/09/05 Javascript
详解Node.js利用node-git-server快速搭建git服务器
2017/09/27 Javascript
通过图带你深入了解vue的响应式原理
2019/06/21 Javascript
vue3 源码解读之 time slicing的使用方法
2019/10/31 Javascript
Vue实现简易购物车页面
2020/12/30 Vue.js
浅析Python的Django框架中的Memcached
2015/07/23 Python
Python并发之多进程的方法实例代码
2018/08/15 Python
基于Python生成个性二维码过程详解
2020/03/05 Python
美国廉价机票预订网站:Cheapfaremart
2018/04/28 全球购物
俄罗斯药房连锁店:ASNA
2020/06/20 全球购物
俄罗斯购买内衣网站:Trusiki
2020/08/22 全球购物
公司道歉信范文
2014/01/09 职场文书
春节随笔
2015/08/15 职场文书
Python中glob库实现文件名的匹配
2021/06/18 Python
用Python编写简单的gRPC服务的详细过程
2021/07/04 Python
Python Flask实现进度条
2022/05/11 Python