CCCallFuncND的void指针的理解
来源:互联网 发布:汉字树 知乎 编辑:程序博客网 时间:2024/06/16 17:00
昨天同事说可能CCCallFuncND也出列点问题,后来我看了一下,顺便查了一下有关CCCallFuncND的定义,在cocos2d中的:
CCCallFuncND *callFun = [CCCallFuncND actionWithTarget:(id) selector:(SEL) data:(void *)];
其中的(void *)也就是所谓的void指针引起了我的兴趣,以前一直用,只知道它是一个可以指向任何类型的数据指针,但从来没有想过为什么会是这样,后来查了有关资料,才高明白。
我们知道一个指针有两个属性:指向变量或对象的“地址”和“长度”,但是指针只存储“地址”,长度则取决于指针的类型。编辑器根据指针的类型从指针的“地址”向后寻址,指针不同,则寻址范围也不同,比如:int * 从指定地址向后寻址4个字节作为变量的存储单元(编译器不同可能有些出入);double * 则从指定的地址向后寻址8个字节作为变量的存储单元。对于void指针有如下特点:
1、void指针是特别的指针,因为它没有类型,也就是我们不知道其长度.;
void *vp;
2、任何指针都可以赋值给void指针;
type *tp;
vp = tp;//不需要转换
//只获得tp的地址
3、void指针转赋值给其他类型的指针时需要转换;
type *tp = (type *)vp;//这样便获得了地址和长度
4、void指针不能复引用,因为void指针并不知道指针的长度;
*vp;//错误的
5、void指针不能参加指针运算,除非先对其进行转换。
对于CCCallFuncND的void指针我们通过以下两个例子就会很明白它是怎么使用的。
例子1:
NSString *s = @"hhhhhhh";CCCallFuncND *cafnd = [CCCallFuncND actionWithTarget:self selector:@selector(callback:data:) data:s ];- (void)callback(id)sender data:(void *)data { NSString *str = (NSString *)data; // 我们可以将void指针转换为NSString.}
例子2:
int temp = 100;CCCallFuncND *cafnd = [CCCallFuncND actionWithTarget:self selector:@selector(callback:data:) data:(void *)temp ];//这里不加一个转换xcode会给出警告.- (void)callback(id)sender data:(void *)data { int t = (int)data; //如果不转换xcode会给出警告.}
- CCCallFuncND的void指针的理解
- 深入理解void以及void指针的含义
- 空类型指针(void *)的理解
- void指针(void *的用法)
- void指针(void *的用法)
- void指针(void *的用法)
- void指针(void *的用法)
- void指针(void *的用法)
- void指针(void *的用法)
- void指针(void *的用法)
- typedef void (*Fun) (void) 的理解——函数指针——typedef函数指针
- typedef void (*Fun) (void) 的理解——函数指针——typedef函数指针
- 指向void 的指针
- void* 指针的二三事
- void指针的操作
- void指针的使用
- 指向void的指针
- void指针的用法
- mysql 按照天 周 月 年 统计数据
- Sql Server生成订单号
- weblogic报监听错误:Error: license signature validation error.的解决办法
- android单元测试
- MapReduce Join联结实现
- CCCallFuncND的void指针的理解
- VC逐行读取指定文件的内容
- SQL SERVER 中服务器角色与数据库角色区别
- js实现判断时间区间
- 存储过程
- java接口与抽象类的区别
- [转载]gl10方法解析
- DAPM之五:dapm机制深入分析(上)
- 火星人软件安装指南 -- 运行环境的安装(IIS,ASP .NET,SQL Server Express)