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


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中compareTo和compare的区别
Apr 12 面试题
面向对象编程的优势是什么
Dec 17 面试题
指针和引用有什么区别
Jan 13 面试题
Android面试题附答案
Dec 08 面试题
请解释流与文件有什么不同
Jul 29 面试题
What's the difference between an interface and abstract class? (接口与抽象类有什么区别)
Oct 29 面试题
C#中类(class)与结构(struct)的异同
Nov 03 面试题
如何进行Linux分区优化
Sep 13 面试题
介绍一下grep命令的使用
Jun 28 面试题
比较一下entity bean和session bean
Dec 27 面试题
分别介绍一下Session Bean和Entity Bean
Mar 13 面试题
AJAX都有哪些有点和缺点
Nov 03 面试题
描述内存分配方式以及它们的区别
Oct 15 #面试题
定义一结构体数组表示分数,并求两个分数相加之和
Jun 11 #面试题
空指针到底是什么
Aug 07 #面试题
C++是不是类型安全的
Feb 18 #面试题
定义一结构体变量,用其表示点坐标,并输入两点坐标,求两点之间的距离
Aug 17 #面试题
New delete 与malloc free 的联系与区别
Feb 04 #面试题
我看到了用指针调用函数的不同语法形式
Jul 16 #面试题
You might like
使用ThinkPHP+Uploadify实现图片上传功能
2014/06/26 PHP
php之可变变量的实例详解
2017/09/12 PHP
laravel csrf排除路由,禁止,关闭指定路由的例子
2019/10/21 PHP
PDO实现学生管理系统
2020/03/21 PHP
autoIMG 基于jquery的图片自适应插件代码
2011/03/12 Javascript
Jsonp 跨域的原理以及Jquery的解决方案
2011/06/27 Javascript
jQuery动态添加的元素绑定事件处理函数代码
2011/08/02 Javascript
javascript 实现键盘上下左右功能的小例子
2013/09/15 Javascript
Javascript中3个需要注意的运算符
2015/04/02 Javascript
AngularJS基础学习笔记之表达式
2015/05/10 Javascript
JS控制表单提交的方法
2015/07/09 Javascript
js显示动态时间的方法详解
2016/08/20 Javascript
JS DOMReady事件的六种实现方法总结
2016/11/23 Javascript
Vue.js父与子组件之间传参示例
2017/02/28 Javascript
简单谈谈CommonsChunkPlugin抽取公共模块
2017/12/31 Javascript
小程序实现左滑删除的效果的实例代码
2020/10/19 Javascript
在vue中使用eslint,配合vscode的操作
2020/11/09 Javascript
ES6学习教程之Promise用法详解
2020/11/22 Javascript
Python中的lstrip()方法使用简介
2015/05/19 Python
Python基于QRCode实现生成二维码的方法【下载,安装,调用等】
2017/07/11 Python
深入理解Python爬虫代理池服务
2018/02/28 Python
python计算两个矩形框重合百分比的实例
2018/11/07 Python
python tkinter GUI绘制,以及点击更新显示图片代码
2020/03/14 Python
5行Python代码实现图像分割的步骤详解
2020/05/25 Python
Python中使用Selenium环境安装的方法步骤
2021/02/22 Python
Python 里最强的地图绘制神器
2021/03/01 Python
canvas实现圆绘制的示例代码
2019/09/11 HTML / CSS
去加拿大的旅行和假期:Canadian Affair
2016/10/25 全球购物
宝宝周岁宴答谢词
2014/01/26 职场文书
司马光教学反思
2014/02/01 职场文书
房屋转让协议书
2014/04/11 职场文书
安全伴我行演讲稿
2014/09/04 职场文书
行政人事主管岗位职责
2015/04/11 职场文书
上诉状格式
2015/05/23 职场文书
企业宣传语大全
2015/07/13 职场文书
2015年教学副校长工作总结
2015/07/22 职场文书