|
7.9.2 空指针
空指针就是什么都不指的指针,表示该指针没有指向任何内存单元。构造空指针有下面两种方法。
赋0值,这是唯一的允许不经转换就赋给指针的数值。
赋NULL值,NULL的值往往等于0,两者等价。
【示例7-25】 指针赋空。 - p=0;
- p=NULL;
空指针常常用来初始化指针,避免野指针的出现。但是直接使用空指针也是很危险的。例如,语句"cout<<*p<<endl;",如果p是空指针,程序就会异常退出。因此,对于空指针不能进行*操作。在7.5.2节中讲指针的关系运算时,就曾讲到过判断空指针的方法。一个负责的程序员,也应该在使用前进行判空的检测。
此外,还需要区分几个概念。
void型指针是无类型指针,它只是说明还没有对被指向的内存单元进行格式化解释。
野指针表示指针声明后没有初始化,没有指向特定的内存单元。
空悬指针表示指针指向的内存单元被释放了,该指针可能指向任何地方,也可能还指向原单元。
空指针则是指指针什么都不指。
技巧:在数组、字符串、链表等处理中,有时并不清楚被处理的对象确切有多少个。此时,可以用判断是否为空来控制遍历的结束。
【示例7-26】 演示空指针的使用。 - int main(void)
- {
- int *pInt=0;
- cout<<pInt<<endl;
- pInt=new int;
- cout<<pInt<<endl;
- delete pInt;
- pInt=0;
- return 0;
- }
分析:该示例定义了一个指针pInt,它被初始化为空。然后用do…while循环申请内存单元,直到pInt不为空,即申请成功才结束循环。程序的最后一定要对pInt置空,否则会出现指针悬挂。下面是可能的输出: - 0
- 0x3e2bf0
输出结果中,由于pInt被初始为空指针,所以申请内存前其地址为0。申请成功后,pInt得到了一个从0x3e3bf0开始的4字节单元。
【责任编辑: 云霞 TEL:(010)68476606】
|