- 浏览: 148928 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (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 987http://royzhou1985.iteye.com ... -
Eclipse插件安装
2012-03-28 09:29 908装载:http://gooss.org/are-two- ... -
Date & Calendar 类的使用
2012-03-27 14:19 666Java 语言的Calendar(日历),Date(日期 ... -
Java文件流 编码问题 - 读取文件时指定字符编码
2012-03-25 22:04 11538折磨了一天的问题,终于在黄昏的时候解决了,现在一吐为 ... -
打jar包
2012-02-04 17:12 749其实JAR文件的格式是ZIP ... -
JavaBean - Bound属性
2012-02-04 15:54 10004.4.3 Bound属性 Bound属性表示当该种 ... -
制作可执行的Jar包
2012-01-22 16:35 738通常有两种,一种是制 ... -
Thread Local
2012-01-22 10:28 756What is Thread Local? Threa ... -
Jni介绍
2011-10-26 19:33 590http://baike.baidu.com/view/127 ... -
获取外网IP地址
2011-10-26 18:47 905访问 http://checkip.dyndns.org/ -
this 与 getSource() 细节
2011-10-14 19:33 703一个对象实例化之后,在它的方法体中出现的this就是指自身。a ... -
static变量生存周期
2011-10-13 22:38 934标准规定static变量保证在第一次使用前初始化,但是并不保证 ... -
String 引用类型与基本类型区别
2011-10-13 22:20 811String a="A"; Stri ... -
为什么会有serialVersionUID
2011-10-13 21:17 624java文件中为什么会有s ... -
抽象类与接口的区别
2011-10-09 11:30 550首先,我们来看一下抽象类的概念,java编程思想中说“万物皆对 ... -
transient用法
2011-09-19 11:16 805Java的serialization提供了一种持久化对象实例的 ... -
例1.1 TextFileTest
2011-07-06 23:19 669package SectionIO; import java ...
相关推荐
那么,如何在程序中获得一个空指针呢?根据语言定义,在指针上下文中的常数 0 会在编译时转换为空指针。也就是说,在初始化、赋值或比较的时候,如果一边是指针类型的值或表达式,编译器可以确定另一边的常数 0为空...
NULL是C语言的标准宏定义,它在或其他头文件中定义为一个空指针常量。尽管NULL通常被实现为(void*)0,但它实际上代表的是任何类型的空指针常量,因此在赋值给不同类型的指针时,不需要进行类型转换。例如,p = NULL...
`也可以使p成为空指针,其中NULL是一个在《stddef.h》或其他头文件中预定义的宏,用于表示空指针常量。通常,NULL的实现为`(void*)0`,但并非所有系统都如此。 关于空指针的内部实现,C标准并未规定空指针必须指向...
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 在使用非全零作为空指针内部...
空指针异常(Null-Pointer Exception)是软件开发中常见的问题之一,它往往会导致应用程序运行异常甚至崩溃。在Android开发领域,Kotlin语言因其简洁和对空安全的严格处理而受到青睐,成为官方推荐的开发语言。然而...
指针是C语言的一大特色,它是一个变量,存储了另一个变量的地址。理解指针是学习C语言的关键。在程序中,我们可以通过指针直接操作内存,这使得指针在动态数据结构、函数参数传递等方面有广泛应用。例如,通过指针...
处理指针错误通常涉及检查指针是否为 NULL,避免空指针引用。可以使用断言或异常处理机制来确保程序的健壮性。 C 语言的特点还包括: 1. 高效:C 语言接近机器级别,执行速度快。 2. 低级特性:提供对内存管理和...
在这里,`p`是一个指向`char *`的指针,因此当我们使用`*p`时,实际上是解引用`p`,得到它所指向的`char *`,即字符串的首字符。`printf("%s\n", *p)`会打印出这个字符串,直到遇到空字符`\0`为止,所以每次循环都会...
** 空指针是一个未指向任何有效地址的指针,通常用NULL或0表示。 7. **如何判断指针是否为空?** 通过比较指针是否等于NULL,如 `if (ptr == NULL)` 判断指针是否为空。 8. **如何动态分配内存?** 使用`malloc()`...
如果在页面中出现空指针异常,通常意味着某个预期被注入的对象为null。 可能的错误原因及解决方案: 1. **配置错误**:检查Spring的配置文件(如`applicationContext.xml`),确保所有需要被注入的对象(如Service...
11.5 怎样获得一个能报告条件失败的程序? 第12章 标准库函数 12.1 为什么应该使用标准库函数而不要自己编写函数? 12.2 为了定义我要使用的标准库函数,我需要使用哪些头文件? 12.3 怎样编写参数数目可变...
在C语言中,空指针、空指针常量、NULL和0是程序设计中非常重要的概念,它们在处理指针时起到关键的作用。本文将深入解析这些概念及其相互关系。 首先,空指针常量(null pointer constant)是指那些在数值上等于0或...
5.2 怎样在程序里获得一个空指针? . . . . . . . . . . . . . . . . . . . 21 5.3 用缩写的指针比较“if(p)” 检查空指针是否可靠?如果空指针的内 部表达不是0 会怎么样? . . . . . . . . . . . . . . . . . . . ...
指针在使用不当的情况下非常容易出现问题,尤其是内存越界、野指针(未初始化或者已经释放的指针)、空指针访问等,都会造成程序的运行时错误,甚至导致程序崩溃(core dump)。以下从给出的内容中提取知识点并详细...
指针是C/C++编程语言中的一个核心概念,它在程序设计中扮演着至关重要的角色。指针可以被视为存储内存地址的变量,这些地址指向其他数据类型的数据。通过指针,我们可以直接操作内存中的数据,这使得代码更加灵活且...