void型指针

本文详细介绍了C++中的void型指针,包括其定义、使用方式及常见应用场景。通过实例演示了如何利用void型指针预申请内存单元并进行类型转换,以灵活地操作不同类型的数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

http://book.51cto.com/art/200909/154154.htm

 

 

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++不再允许默认为int型返回值,要求没有返回值时必须用void说明。

如果函数没有参数,应该用void说明。C++也允许不用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型指针预申请一块内存单元,当需要的时候再告诉系统怎么来解释这片空间。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值