- 浏览: 144285 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (110)
- CoreJava (18)
- 待解决 (1)
- 数据结构 (3)
- 科普 (2)
- 网站 (1)
- DataBase (8)
- Access (1)
- Asp (1)
- JSP (1)
- 操作系统 (8)
- Tech (1)
- Linux (11)
- Career (5)
- MongoDB (1)
- Embedded (1)
- JavaScript (1)
- UltraIso (1)
- Linux命令 (1)
- DesignPattern (1)
- Ruby (13)
- Vim (1)
- 自考 (2)
- Github (5)
- zrProject (1)
- Emacs (4)
- Math (3)
- Ajax (1)
- 没看懂 (1)
- HTML (1)
- Philosophy (1)
- 软件 (1)
- 面试 (1)
- 考试报名 (3)
- Regex (1)
- 日语 (1)
- 生活 (1)
最新评论
6.2 怎样在程序里获得一个空指针?
根据语言定义, 在指针上下文中的常数 0 会在编译时转换为空指针。也就是说, 在初始化、 赋值或比较的时候, 如果一边是指针类型的值或表达式, 编译器可以 确定另一边的常数 0 为空指针并生成正确的空指针值。因此下边的代码段完全 合法:char *p = 0; if(p != 0)参见问题 5.3。
然而, 传入函数的参数不一定被当作指针环境, 因而编译器可能不能识别未加 修饰的 0 ``表示" 指针。在函数调用的上下文中生成空指针需要明确的类型转换, 强制把 0 看作指针。例如, Unix 系统调用 execl 接受变长的以空指针结束 的字符指针参数。它应该如下正确调用:
execl("/bin/sh", "sh", "-c", "date", (char *)0);
如果省略最后一个参数的 (char *) 转换, 则编译器无从知道这是一个空指针, 从而当作一个 0 传入。(注意很多 Unix 手册在这个例子上都弄错了。)
如果范围内有函数原型, 则参数传递变为 ``赋值上下文", 从而可以安全省略 多数类型转换, 因为原型告知编译器需要指针, 使之把未加修饰的 0 正确转换为适当的指针。函数原型不能为变长参数列表中的可变参数提供类型。 (参见问题 15.3) 在函数调用时对所有的空指针进行类型转换可能是预防 可变参数和无原型函数出问题的最安全的办法。
摘要:
可以使用未加修饰的 0: | 需要显示的类型转换: |
初始化 | 函数调用, 作用域内无原型 |
赋值 | 变参函数调用中的可变参数 |
比较 | |
固定参数的函数调用且在作用域内有原型 |
参考资料: [K&R1, Sec. A7.7 p. 190, Sec. A7.14 p. 192]; [K&R2, Sec. A7.10 p. 207, Sec. A7.17 p. 209]; [ISO, Sec. 6.2.2.3]; [H&S, Sec. 4.6.3 p. 95, Sec. 6.2.7 p. 171]。
发表评论
-
利用反射实现ORM
2012-03-28 13:37 946http://royzhou1985.iteye.com ... -
Eclipse插件安装
2012-03-28 09:29 863装载:http://gooss.org/are-two- ... -
Date & Calendar 类的使用
2012-03-27 14:19 626Java 语言的Calendar(日历),Date(日期 ... -
Java文件流 编码问题 - 读取文件时指定字符编码
2012-03-25 22:04 11496折磨了一天的问题,终于在黄昏的时候解决了,现在一吐为 ... -
打jar包
2012-02-04 17:12 712其实JAR文件的格式是ZIP ... -
JavaBean - Bound属性
2012-02-04 15:54 9674.4.3 Bound属性 Bound属性表示当该种 ... -
制作可执行的Jar包
2012-01-22 16:35 699通常有两种,一种是制 ... -
Thread Local
2012-01-22 10:28 700What is Thread Local? Threa ... -
Jni介绍
2011-10-26 19:33 558http://baike.baidu.com/view/127 ... -
获取外网IP地址
2011-10-26 18:47 855访问 http://checkip.dyndns.org/ -
this 与 getSource() 细节
2011-10-14 19:33 656一个对象实例化之后,在它的方法体中出现的this就是指自身。a ... -
static变量生存周期
2011-10-13 22:38 878标准规定static变量保证在第一次使用前初始化,但是并不保证 ... -
String 引用类型与基本类型区别
2011-10-13 22:20 778String a="A"; Stri ... -
为什么会有serialVersionUID
2011-10-13 21:17 589java文件中为什么会有s ... -
抽象类与接口的区别
2011-10-09 11:30 512首先,我们来看一下抽象类的概念,java编程思想中说“万物皆对 ... -
transient用法
2011-09-19 11:16 776Java的serialization提供了一种持久化对象实例的 ... -
例1.1 TextFileTest
2011-07-06 23:19 625package SectionIO; import java ...
相关推荐
空指针在概念上不同于未初始化的指针。空指针可以确保不指向任何对象或函数; 而未初始化指针则可能指向任何地方。
5.2 怎样在程序里获得一个空指针?. . . . . . . . . . . . . . . . . . . 21 5.3 用缩写的指针比较“if(p)”检查空指针是否可靠?如果空指针的内 部表达不是0会怎么样?. . . . . . . . . . . . . . . . . . . . . ...
5.2 怎样在程序里获得一个空指针? 5.3 用缩写的指针比较“if(p)”检查空指针是否有效?如果空指针的内部表达不是0会怎样? NULL宏 5.4 NULL是什么,它是怎么定义的? 5.5 在使用非零位模式作为空指针的内部...
5.2 怎样在程序里获得一个空指针? 54 5.3 用缩写的指针比较“if(p)”检查空指针是否有效?如果空指针的内部表达不是0会怎样? 55 NULL 宏 56 5.4 NULL是什么,它是怎么定义的? 56 5.5 在使用非零位模式...
o 6.2 怎样在程序里获得一个空指针? o 6.3 用缩写的指针比较 ``if(p)" 检查空指针是否可靠?如果空指针的内部表达不是 0 会怎么样? o 6.4 NULL 是什么, 它是怎么定义的? o 6.5 在使用非全零作为空指针内部...
5.2 怎样在程序里获得一个空指针? 5.3 用缩写的指针比较“if(p)”检查空指针是否有效?如果空指针的内部表达不是0会怎样? NULL 宏 5.4 NULL是什么,它是怎么定义的? 5.5 在使用非零位模式作为空指针的内部表示的...
11.5 怎样获得一个能报告条件失败的程序? 第12章 标准库函数 12.1 为什么应该使用标准库函数而不要自己编写函数? 12.2 为了定义我要使用的标准库函数,我需要使用哪些头文件? 12.3 怎样编写参数数目可变...
5.2 怎样在程序里获得一个空指针? . . . . . . . . . . . . . . . . . . . 21 5.3 用缩写的指针比较“if(p)” 检查空指针是否可靠?如果空指针的内 部表达不是0 会怎么样? . . . . . . . . . . . . . . . . . . . ...
11.5. 怎样获得一个能报告条件失败的程序? 164 第12章 标准库函数 165 12.1. 为什么应该使用标准库函数而不要自己编写函数? 165 12.2. 为了定义我要使用的标准库函数,我需要使用哪些头文件? 166 12.3. 怎样编写参数...
该方法首先结合程序的静态分析技术,利用程序运行时的堆栈信息指导程序切片,然后对得到的切片进行空指针分析及别名分析,得出引发空指针异常的可疑语句集合,最终给出错误定位报告。实验结果表明,所提方法虽然因...
一些VC编程的技巧 Visual C++编程技巧精选(缺57-67) 1. 如何获取应用程序的实例句柄? 2. 如何通过代码获得应用程序主窗口的指针?...88.怎样在一个应用程序中加载另一个应用程序 89.如何获得当前时间
为学习Java程序设计的基础同学提供习题代码的参考,便于他们掌握多种方法,得到解决问题的思路和想法,Java程序设计与数据结构第七章习题答案!!!
编写程序构造一个有序表La,从键盘接收一个关键字key,用二分查找法在La 中查找key,若找到则提示查找成功并输出key所在的位置,否则提示没有找到信息。 2.编写程序实现Hash表的建立、删除、插入以及查找操作。 ...
一个句柄是指使用的一个唯一的整数值,即一个4字节(64位程序中为8字节)长的数值,来标识应用程序中的不同对象和同类对象中的不同的实例,诸如,一个窗口,按钮,图标,滚动条,输出设备,控件或者文件等。...
一部久享盛誉的程序开发宝典。精选570个典型范例,全面覆盖实用和热点技术,涉及面广,实用性强源于实际项目开发,帮助读者短时间掌握更多实用技术,提高编程水平范例经过精心编排,重点、难点突出,易学易懂书后...
程序里我们先建立一个主工程,作为主界面,然后再建立一个对 话框类,将其加入工程中,然后在程序中调用自己新建的对话框类来实现多窗口。 实现过程: 1.首先新建Qt4 Gui Application 工程,工程名为nGui,Base ...