设为首页 加入收藏

TOP

7.9.2 空指针
2013-10-07 01:11:53 来源: 作者: 【 】 浏览:67
Tags:7.9.2 指针

7.9.2  空指针

空指针就是什么都不指的指针,表示该指针没有指向任何内存单元。构造空指针有下面两种方法。

赋0值,这是唯一的允许不经转换就赋给指针的数值。

赋NULL值,NULL的值往往等于0,两者等价。

【示例7-25】 指针赋空。

  1. p=0;  
  2. p=NULL; 

空指针常常用来初始化指针,避免野指针的出现。但是直接使用空指针也是很危险的。例如,语句"cout<<*p<<endl;",如果p是空指针,程序就会异常退出。因此,对于空指针不能进行*操作。在7.5.2节中讲指针的关系运算时,就曾讲到过判断空指针的方法。一个负责的程序员,也应该在使用前进行判空的检测。

此外,还需要区分几个概念。

void型指针是无类型指针,它只是说明还没有对被指向的内存单元进行格式化解释。

野指针表示指针声明后没有初始化,没有指向特定的内存单元。

空悬指针表示指针指向的内存单元被释放了,该指针可能指向任何地方,也可能还指向原单元。

空指针则是指指针什么都不指。

技巧:在数组、字符串、链表等处理中,有时并不清楚被处理的对象确切有多少个。此时,可以用判断是否为空来控制遍历的结束。

【示例7-26】 演示空指针的使用。

  1. int main(void)  
  2. {  
  3.     int *pInt=0;        //置空  
  4.     cout<<pInt<<endl;   //输出地址  
  5.     pInt=new int;       //申请内存空间  
  6.     cout<<pInt<<endl;   //输出地址  
  7.     delete pInt;        //释放  
  8.     pInt=0;             //置空  
  9.     return 0;  

分析:该示例定义了一个指针pInt,它被初始化为空。然后用do…while循环申请内存单元,直到pInt不为空,即申请成功才结束循环。程序的最后一定要对pInt置空,否则会出现指针悬挂。下面是可能的输出:

  1. 0  
  2. 0x3e2bf0 

输出结果中,由于pInt被初始为空指针,所以申请内存前其地址为0。申请成功后,pInt得到了一个从0x3e3bf0开始的4字节单元。

【责任编辑:云霞 TEL:(010)68476606】

回书目   上一节   下一节

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇7.8 引用与指针 下一篇7.12 上机实践

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: