指针有两个属性:它们指向变量/对象的地址和长度
但是,指针只存储地址,长度因指针类型而异
编译器根据指针的类型从指针指向的地址向后方进行地址指定
地址范围因指针类型而异。 例如:
int*从指定的地址向后方寻找以4字节为变量的存储单元
double*查找从指定地址向后以8字节为变量的存储单元
1.void指针是一个特殊的指针
void *vp
//那是因为没有什么类型
//或者说,该类型无法确定指向对象的长度
2 .可以将任何指针分配给void指针
类型* p;
vp=p;
//不需要转换
//变量/只获取对象地址,不获取大小
3 .如果3.void指针指定给其他类型的指针,则进行转换
类型* p=(类型* ) vp;
//获取转换类型,即指针变量/对象大小
到:http://I coding.spaces.live.com/blog/cns! 209684E38D520BA6! 130 .进入
4 .无法重新引用4.void指针
*vp//错误
因为void指针只知道指向变量/对象的起始地址
另一方面,由于不知道变量/对象的大小(以字节为单位),因此无法正确引用
5 .除非转换,否则5.void指针不能参与指针运算
(类型* ) vp;
//VP==VPsizeof(type )。
void *定义指针变量,但不指示它指向哪种类型的数据。
1 .传参:通用型
可以用作函数模板、链表等参数的公共参数。 使用时,只需强制类型转换即可。
2 .强制类型转换
由于过载等干扰,可能需要转换为void *才能获取地址。
例如,(void * ) obj.member可以获取member的地址。 直接(obj.member )获取的实际上是obj的开始地址。
指向3.0的地址
(void * ) 0指的都是0的地址,相当于NULL。
非void类型显式转换为void类型,用于避免某些代码静态检查工具的警告。