先介绍下void指针:
其中的第三个参数类型为void指针.我们知道一个指针有两个属性:指向变量或对象的"地址"和"长度".但是指针只存储"地址".
长度则取决于指针的类型.编辑器根据指针的类型从指针的"地址"向后寻址,指针不同,则寻址范围也不同.比如:
int * 从指定地址向后寻址4个字节作为变量的存储单元; double * 则从指定的地址向后寻址8个字节作为变量的存储单元.
1.void指针是特别的指针,因为它没有类型,也就是我们不知道其长度.
void *vp;
2.任何指针都可以赋值给void指针.
type *tp;
vp = tp;//不需要转换.
//只获得tp的地址.
3.void指针转赋值给其他类型的指针时需要转换.
type *tp = (type *)vp;//这样便获得了地址和长度.
4.void指针不能复引用,因为void指针并不知道指针的长度.
*vp;//错误的
5.void指针不能参加指针运算,除非先对其进行转换.
参考:http://www.cppblog.com/dragon/archive/2008/09/02/60760.aspx
---------------------------------------------------------------------------------------------------------------------
下面我们在来看看cocos2d中的:
CCCallFuncND *callFun = [CCCallFuncND actionWithTarget:(id) selector:(SEL) data:(void *)];
我们可以看到第三个参数的类型是void指针.
对于obj-c的对象指针来说,可以直接将其作为参数传给data.我们前面的2中说了,任何指针都可以赋值给void指针,但是要注意,丢了类型.
例子1:
NSString *str = @"hello world";
CCCallFuncND *ac =
[CCCallFuncND actionWithTarget:self selector:@selector(move:data:) data:tempString
];
- (void)move(id)sender data:(void *)data {
NSString *str = (NSString *)data;// 我们可以将void指针转换为NSString.
}
例子2:
int t = 100;
CCCallFuncND *ac =
[CCCallFuncND actionWithTarget:self selector:@selector(move:data:) data:(void *)t
];//这里不加一个转换xcode会给出警告.
- (void)move(id)sender data:(void *)data {
int t = (int)data;//如果不转换xcode会给出警告.
}
分享到:
相关推荐
void指针void指针void指针void指针void指针
void指针使用规范①void指针可以指向任意类型的数据,亦即可用任意数据类型的指针对void指针赋值。例如:int *pint;void *pvoid;pvoid = pint; /* 不过不能 pint = pvoid; */如果要将pvoid赋给其他类型指针,则需要...
许多初学者对C/C++诧言中的void及void指针类型丌甚理解,因此在使用上出现了一些错诨。本文将对void关键字的深刻含义迚行解说,并详述void及void指针类型的使用方法不技巧。
void及void指针(C,C++)
C语言void及void指针深层探索.doc
许多初学者对C/C++语言中的void及void指针类型不甚理解,因此在使用上出现了一些错误。本文将对void关键字的深刻含义进行解说,并详述void及void指针类型的使用方法与技巧。
void及void指针含义的深刻解析,C/c++中void的使用方法。
用void* 定义一个void类型的指针,它不指向任何类型的数据,意思是,void*指针“指向空类型”或“不指向确定的类型”,而不要理解为void*指针能指向“任何的类型”数据。简而言之:void*只提供一个地址,没有指向。
小小的void蕴藏着很丰富的设计哲学,作为一名程序设计人员,对问题进行深一个层次的思考必然使我们受益匪浅。
rar文件包含:Vector.h、Vector.c、...存储数据使用void*、void**,其中包括结构体数据结构。主要功能有初始化动态数组、释放动态数组、尾插法、删除指定下标、更新指定下标数据、打印数据、获取数据对应的指定下标等。
C语言void及void指针深层探索,希望对大家有帮助
只有了解了地址,你才了解计算机。 只有了解了void指针,你才真正了解了
invalid conversion from `void*' to `SeqList*' 说明你把void *指针付给SeqList*类型的指针了,是不是L=malloc(sizeof(SeqList));出问题了呢,malloc的正确用法是L=(SeqList *)malloc(sizeof(SeqList)); 希望能帮到...
绝对好 C和C++语言中void及void指针的深层探索
rar文件包含:DoubleList.h、DoubleList.c、main.c...存储数据使用void*、void**,其中包括结构体数据结构。主要功能有初始化双链表、释放双链表、尾插法、任意插入法、任意删除法、打印数据(从左至右、从右至左)等。
void及void指针深层探索[文].pdf
深入了解void指针背后的机理.docx
/*前驱指针*/ struct z1 *next;/*后继指针*/ }SALARY; /*结构体类型名*/ struct z1 *First; /*双链表头指针*/ struct z1 *Last; /*双链表尾指针*/ /******函数原型*********/ void init(); /*初始化*/ void create...
积累这我一点一点学习指针的过程 牵扯const的指针我都找出来了 先别说资源垃圾 等你看完再说我垃圾不迟