今天在写项目需求的时候,用到void*,开始没搞明白void*到底什么意思,问了老大,一语惊醒梦中人!!!!!!
event->setUserData((void*)10);
int* data = (int*)event->getUserData();
CCLOG("data = %d", data);
开始这么设置setUserData,很疑惑为什么不用*data就可以输出10,反而*data就报错了!!!!
老大说,指针本身的值就是10,我就明白了!!!!
(void*)10是把10变成了一个指针地址的值,这个地址是没初始化的,所以*data是基本所错了,地址值为10的这块内存地址内容未知!!!!
后来老大说,直接int data = (int)event->getUserData();就可以了用10这个值了,只要编译器不报错!!!
在群里也问了这个问题,也得到一个解法,直接new出来就OK了,也不会有歧义!
event->setUserData(new int(10));
int* data = (int*)event->getUserData();
int b = *data;
CCLOG("&data = %d, data = %d", data, *data);
这样也可以使用10这个值了!!!
void*这个以前用的少,不明白!!!!今天算是涨知识了!!!!!!!
如果是int型的用第一种比较方便!!!!!
非常感谢老大和群里的朋友!!!!
时间: 2024-10-25 18:36:32