怎样在程序里获得一个空指针


Posted in 面试题 onJanuary 24, 2015
根据语言定义, 在指针上下文中的常数0 会在编译时转换为空指针。也就是说, 在初始化、赋值或比较的时候, 如果一边是指针类型的值或表达式, 编译器可以确定另一边的常数0 为空指针并生成正确的空指针值。因此下边的代码段完全合法:
char *p = 0;
if(p != 0)
然而, 传入函数的参数不一定被当作指针环境, 因而编译器可能不能识别未加修饰的0 “表示” 指针。在函数调用的上下文中生成空指针需要明确的类型转换,强制把0 看作指针。例如, Unix 系统调用execl 接受变长的以空指针结束的字符指针参数。它应该如下正确调用:
execl(“/bin/sh”, “sh”, “-c”, “date”, (char *)0);
如果省略最后一个参数的(char *) 转换, 则编译器无从知道这是一个空指针,从而当作一个0 传入。(注意很多Unix 手册在这个例子上都弄错了。
如果范围内有函数原型, 则参数传递变为“赋值上下文”, 从而可以安全省略多数类型转换, 因为原型告知编译器需要指针, 使之把未加修饰的0 正确转换为适当的指针。函数原型不能为变长参数列表中的可变参数提供类型。在函数调用时对所有的空指针进行类型转换可能是预防可变参数和无原型函数出问题的最安全的办法。

Tags in this post...

面试题 相关文章推荐
如何设置Java的运行环境
Apr 05 面试题
精伦电子Java笔试题
Jan 16 面试题
C面试题
Oct 08 面试题
"火柴棍式"程序员面试题
Mar 16 面试题
求∏的近似值,直到最后一项的绝对值小于指定的数
Feb 12 面试题
阿里巴巴Oracle DBA笔试题答案-备份恢复类
Nov 20 面试题
触发器(trigger)的功能都有哪些?写出一个触发器的例子
Sep 17 面试题
编程实现去掉XML的重复结点
May 28 面试题
Solaris操作系统的线程机制
Dec 23 面试题
长青弘远的面试题
Jun 09 面试题
什么是lambda函数
Sep 17 面试题
Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?
Jul 27 面试题
描述内存分配方式以及它们的区别
Oct 15 #面试题
定义一结构体数组表示分数,并求两个分数相加之和
Jun 11 #面试题
空指针到底是什么
Aug 07 #面试题
C++是不是类型安全的
Feb 18 #面试题
定义一结构体变量,用其表示点坐标,并输入两点坐标,求两点之间的距离
Aug 17 #面试题
New delete 与malloc free 的联系与区别
Feb 04 #面试题
我看到了用指针调用函数的不同语法形式
Jul 16 #面试题
You might like
Thinkphp中数据按分类嵌套循环实现方法
2014/10/30 PHP
浅析PHP中call user func()函数及如何使用call user func调用自定义函数
2015/11/05 PHP
php array_map使用自定义的函数处理数组中的每个值
2016/10/26 PHP
Jquery ui css framework
2010/06/28 Javascript
验证码按回车不变解决方法
2013/03/29 Javascript
js利用事件的阻止冒泡实现点击空白模态框的隐藏
2014/01/24 Javascript
jquery实现弹出div,始终显示在屏幕正中间的简单实例
2014/03/08 Javascript
14个有用的Jquery技巧分享
2015/01/08 Javascript
JavaScript程序中实现继承特性的方式总结
2016/06/24 Javascript
vuejs父子组件之间数据交互详解
2017/08/09 Javascript
响应式框架Bootstrap栅格系统的实例
2017/12/19 Javascript
浅谈Node.js爬虫之网页请求模块
2018/01/11 Javascript
基于打包工具Webpack进行项目开发实例
2018/05/29 Javascript
vue项目中使用百度地图的方法
2018/06/08 Javascript
JavaScript实现简单轮播图效果
2018/12/01 Javascript
JS实现获取数组中最大值或最小值功能示例
2019/03/02 Javascript
webpack中的模式(mode)使用详解
2020/02/20 Javascript
vue实现购物车列表
2020/06/30 Javascript
JavaScript实现烟花绽放动画效果
2020/08/04 Javascript
vue 函数调用加括号与不加括号的区别
2020/10/29 Javascript
python dict.get()和dict['key']的区别详解
2016/06/30 Python
Python标准库sched模块使用指南
2017/07/06 Python
python读取中文txt文本的方法
2018/04/12 Python
Python异常的检测和处理方法
2018/10/26 Python
python3实现带多张图片、附件的邮件发送
2019/08/10 Python
python 哈希表实现简单python字典代码实例
2019/09/27 Python
如何在django中运行scrapy框架
2020/04/22 Python
python小程序之4名牌手洗牌发牌问题解析
2020/05/15 Python
如何以Winsows Service方式运行JupyterLab
2020/08/30 Python
瑞典手机壳品牌:Richmond & Finch
2018/04/28 全球购物
Currentbody澳大利亚:美容仪专家
2019/11/11 全球购物
美国精品地毯网站:Boutique Rugs
2020/03/04 全球购物
演讲稿怎么写
2014/01/07 职场文书
《北大荒的秋天》教学反思
2014/04/14 职场文书
公司外出活动方案
2014/08/14 职场文书
县政府办公室领导班子对照检查材料思想汇报
2014/09/28 职场文书