这里面的void* 什么意思???

来源:百度知道 编辑:UC知道 时间:2024/06/15 22:16:22
struct gg_world_collision_userdata
{
CollisionGroup collisionType;
void* userData;
gg_world_collision_userdata()
{
collisionType = GROUP_COLLIDABLE_NON_PUSHABLE;
userData = 0;
}
};

首先void*是一种指针,并且没有类型。由于32位系统下所有指针都是4字节长度的,所以不同类型的指针变量之间可以互相转换,而写为void*则它有可能是任何类型的指针,这样写只是为了统一类型。
如此一来,这个结构的实例的userData可以是任何类型指针,或许某个是int*,其他的又是char*,看用的时候你给它赋什么值了。

gg1.userData = (void*)new int;
gg2.userData = (void*)new char;

但是使用userData的时候你一定要知道它本身是什么类型的并且进行转换,void*不能直接使用。
int n = *((int*)gg1.userData);
char c = *((char*)gg2.userData);

指针

表示定义一个空指针,注意,空指针不等于NULL指针,void * 可以指向任何类型的指针,不过先要进行一个类型转换,例如要他指向int型指针,只需进行:
int *pi=(int *)userData;

是一个指向void type的指针,可以是任何形式。但是被指向的数据不会被返回。