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


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...

面试题 相关文章推荐
写出程序把一个链表中的接点顺序倒排
Apr 28 面试题
不用游标的SQL语句有哪些
Sep 07 面试题
XML文档面试题
Aug 05 面试题
网络编程中设计并发服务器,使用多进程与多线程,请问有什么区别?
Mar 27 面试题
C#面试题
May 06 面试题
星空联盟C# .net笔试题
Dec 05 面试题
在对linux系统分区进行格式化时需要对磁盘簇(或i节点密度)的大小进行选择,请说明选择的原则
Jan 13 面试题
如何开启linux的ssh服务
Feb 14 面试题
广州足迹信息技术有限公司Java软件工程师试题
Feb 15 面试题
重写子类方法时,抛出异常的书写注意事项
Oct 17 面试题
与UNIX有关的几个名词
Sep 17 面试题
Unix里面如何在后台运行程序
Oct 14 面试题
描述内存分配方式以及它们的区别
Oct 15 #面试题
定义一结构体数组表示分数,并求两个分数相加之和
Jun 11 #面试题
空指针到底是什么
Aug 07 #面试题
C++是不是类型安全的
Feb 18 #面试题
定义一结构体变量,用其表示点坐标,并输入两点坐标,求两点之间的距离
Aug 17 #面试题
New delete 与malloc free 的联系与区别
Feb 04 #面试题
我看到了用指针调用函数的不同语法形式
Jul 16 #面试题
You might like
PHP中echo和print的区别
2014/08/28 PHP
PHP基于cookie与session统计网站访问量并输出显示的方法
2016/01/15 PHP
Composer设置忽略版本匹配的方法
2016/04/27 PHP
php读取XML的常见方法实例总结
2017/04/25 PHP
支持汉转拼和拼音分词的PHP中文工具类ChineseUtil
2018/02/23 PHP
使用PHP+Redis实现延迟任务,实现自动取消订单功能
2019/11/21 PHP
使用jQuery全局事件ajaxStart为特定请求实现提示效果的代码
2010/12/30 Javascript
javascript 学习笔记(八)javascript对象
2011/04/12 Javascript
JS调用CS里的带参方法实例
2013/08/01 Javascript
JS常用函数使用指南
2014/11/23 Javascript
jQuery Easyui学习之datagrid 动态添加、移除editor
2016/01/27 Javascript
你一定会收藏的Nodejs代码片段
2016/02/04 NodeJs
基于JavaScript Array数组方法(新手必看篇)
2016/08/20 Javascript
Bootstrap中定制LESS-颜色及导航条(推荐)
2016/11/21 Javascript
30分钟快速入门掌握ES6/ES2015的核心内容(下)
2018/04/18 Javascript
vue中的watch监听数据变化及watch中各属性的详解
2018/09/11 Javascript
VUE2.0+ElementUI2.0表格el-table循环动态列渲染的写法详解
2018/11/30 Javascript
layui对工具条进行选择性的显示方法
2019/09/19 Javascript
python实现迭代法求方程组的根过程解析
2019/11/25 Javascript
[58:29]DOTA2-DPC中国联赛 正赛 Phoenix vs XG BO3 第一场 1月31日
2021/03/11 DOTA
python多线程编程方式分析示例详解
2013/12/06 Python
Python 快速实现CLI 应用程序的脚手架
2017/12/05 Python
python开启摄像头以及深度学习实现目标检测方法
2018/08/03 Python
Python面向对象程序设计OOP深入分析【构造函数,组合类,工具类等】
2019/01/05 Python
利用python3筛选excel中特定的行(行值满足某个条件/行值属于某个集合)
2020/09/04 Python
python安装第三方库如xlrd的方法
2020/10/31 Python
详解Python模块化编程与装饰器
2021/01/16 Python
matplotlib 范围选区(SpanSelector)的使用
2021/02/24 Python
爱尔兰电脑、家电和家具购物网站:Buy It Direct
2019/07/09 全球购物
年级组长自我鉴定
2014/02/22 职场文书
百日安全活动总结
2014/05/04 职场文书
公证委托书标准格式
2014/09/11 职场文书
2015年城管执法工作总结
2015/07/23 职场文书
九九重阳节致辞
2015/07/31 职场文书
Go 自定义package包设置与导入操作
2021/05/06 Golang
MySQL生成千万测试数据以及遇到的问题
2022/08/05 MySQL