void * 详解

void的字面意思是“无类型”,void *则为“无类型 指针 ”, void *可以指向任何类型的数据。

 void真正发挥的作用在于:  

 (1) 对函数返回的限定;

 (2) 对函数参数的限定。 

下面给出void关键字的使用规则:

规则一

   如果函数没有返回值,那么应声明为void类型

规则二

   如果函数无参数,那么应声明其参数为void。

规则三

   小心使用void指针类型

规则四

   如果函数的参数可以是任意类型指针,那么应声明其参数为void *

    典型的如内存操作函数memcpy和memset的函数原型分别为:  void * memcpy(void *dest, const void *src,  size_t   len);  void * memset ( void * buffer, int c, size_t num );  这样,任何类型的指针都可以传入memcpy和memset中,这也真实地体现了内存操作函数的意义,因为它操作的对象仅仅是一片内存,而不论这片内存是什么类型。如果memcpy和memset的参数类型不是void *,而是char *,那才叫真的奇怪了!

规则五

   void不能代表一个真实的变量

(void *)是一个指针类型;空指针。

  既然是指针,他们它就是一个地址,在内存中,地址就可以用 int 来表示;

参数传递中常常用到(void *)的,尤其多线程。
你可以把任何的结构体的地址转为(void *)类型来传递,用到的时候再把它转回来。

    众所周知,如果指针p1和p2的类型相同,那么我们可以直接在p1和p2间互相赋值;如果p1和p2指向不同的数据类型,则必须使用 强制类型转换 运算符把赋值运算符右边的指针类型转换为左边指针的类型。

    而void *则不同,任何类型的指针都可以直接赋值给它,无需进行强制类型转换:

但这并不意味着,void *也可以无需强制类型转换地赋给其它类型的指针。因为“无类型”可以包容“有类型”,而“有类型”则不能包容“无类型”。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值