设为首页 加入收藏

TOP

7.9.1 void型指针
2013-10-07 01:12:06 来源: 作者: 【 】 浏览:67
Tags:7.9.1 void 指针

7.9  特殊指针

除了有明确指向和类型的指针外,有时候还常常用到一些特殊类型的指针,以应对特殊的用途。本节将向读者介绍void型指针和空指针,这两种指针在实际应用中经常会用到。

7.9.1  void型指针

void型指针就是无类型指针。它没有类型,只是指向一块申请好的内存单元。其格式如下所示。

  1. void *p; 

其中,void表示"无类型",表示不明确指针所指向的内存单元应该按什么格式来处理。p是指针变量名。整体的意思是指定义了一个指针p,但却不规定应该按何种格式来解释其作指向的内存单元的内容。由于void只是说明被修饰的对象无类型,却不分配内存,所以除指针外不能定义其他类型变量。因为指针本身的存储空间是定义时就申请好的,其指向的内存单元可以在需要的时候再申请。但是其他类型,如int、float等,则必须定义即申请,否则没有内存单元来存放数据。

【示例7-23】 演示void型指针的定义。

  1. void *p;  
  2. void x; 

分析:示例中,第1条语句是允许的,但第2条是不允许的。实际上,void几乎只是在"说明"被定义变量的类型,不涉及内存的分配。

在7.4.4节中,malloc()函数的声明格式中,返回值为void型。这表明malloc只是按照要求的大小分配了内存单元,不负责解释这些内存单元的格式。因此,在使用malloc时,一定要用强制类型转换,转换为需要的类型。否则,使用时会发生错误。

在本书的例子中,常常会看到main()函数的参数被写为void,这表示不关心,也不像处理命令行参数。在main()函数的定义中,这是允许的。

除了void型指针外,还经常用在两种情况下,这两种情况都与函数有关。

如果函数没有返回值,那么应该声明为void型。C++(www.cppentry.com)不再允许默认为int型返回值,要求没有返回值时必须用void说明。

如果函数没有参数,应该用void说明。C++(www.cppentry.com)也允许不用void说明,这时该函数相当于某些其他语言中的过程。

【示例7-24】 演示void型指针的使用。

  1. int main(void)  
  2. {  
  3.     void *pVoid=0;          //void型指针  
  4.     char *pChar=0;  
  5.     int *pInt=0;  
  6.     pVoid=malloc(4);        //申请内存单元  
  7.     pChar=(char*)pVoid;     //强制转换为char*  
  8.     for (int i=0;i<3;i++)  
  9.         *(pChar++)='a';     //循环赋值  
  10.     *pChar='\0';            //赋字符串的结束符  
  11.     cout<<pChar<<endl;  
  12.  
  13.     pInt=(int*)pVoid;       //强制转换为int*  
  14.     *pInt=1234;           
  15.     cout<<*pInt<<endl;        
  16.     free (pVoid);           //释放  
  17.     pVoid=0;                //置空  
  18.     return 0;  
分析:该示例定义了3个指针,其中一个是void型。首先给void型指针申请了4字节的内存单元,然后分别强制转换为char型和int型。从这个示例可以看出,可以用void型指针预申请一块内存单元,当需要的时候再告诉系统怎么来解释这片空间。

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

回书目   上一节   下一节

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇7.10 指针的命名规范 下一篇7.7.2 *操作符

评论

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