高级会员

- 积分
- 560
- 金钱
- 560
- 注册时间
- 2016-4-12
- 在线时间
- 230 小时
|
发表于 2018-1-18 09:56:07
|
显示全部楼层
刚看到这个的时候,我也一大堆疑问,刚用visio试了下,加上百度,总结了下:
先看看百度void*的用法:
void * 以定义一个指针变量,但不说明它指向哪一种类型数据.
1. 传参:通用类型
可以作为函数模板,链表等参数的通用参数。在使用时,只需要强制类型转换就可以。
2.强制类型转换
有时候由于重载等的干扰,导致需要转换成void *,来进行取地址。
例如,(void *)obj.member,就可以取到member的地址;直接&(obj.member)取到的实际上是obj的开始地址。
3.指向0的地址
(void *)0,指向全是0的地址,相当于NULL。
非void类型显式转换为void类型表达式,用于避免一些代码静态检查工具的警告。
这个回答应该可以解决了为什么要在前面加个void *吧,楼上争论的有没有必要加参数,刚做了下实验,在函数有返回值的时候,定义指针时必须加参数的,如果是void无返回类型的,就不用必须加了,所以楼主的楼上的说的都是对的,我的一个test,你们看下。[mw_shl_code=applescript,true]#include "stdafx.h"
#include <stdlib.h>
typedef unsigned int u32;
u32 test(u32 a, u32 b)
{
|
|