您的位置:首页 > 其它

指向void 的指针

2007-01-29 19:28 239 查看
一个指向任何对象 类型的指针都可以赋值给类型为void* 的变量,void* 可以赋值给另一个void* ,两个void* 可以比较相等与否,而且可以显式地将void* 转换到另一个类型。其它操作都是不安全的,因为编译器并不知道实际被指的是哪种对象。因此,对void* 做其他任何操作都将引起编译错误。要使用void*,就必须显式地将经转换到某个指向特定类型的指针。

例:

void  Test(int *pi)

{

  void *pv = pi;  //ok ,从 int* 到 void* 的隐式转换

  *pv ;                   //错误:void* 不能间接引用

   pv++;               //错误:void* 不能增量(不知道被指定类型的大小)

  int *pi1 = static_cast<int*>(pv);    //ok: 显式转换回 int*

  double * pi2 = pv;   //错误

  double *pi3 = pi;    //错误

  double *pi4 = static_cast<double*>(pv);   //ok:  不安全

}

1.一般来说,如果一个指针被转换(“强制”,cast)到与被批对象的实际类型不同的指针,使用后一个指针就是不安全的。 void* 的最重要用途是需要向函数货传递一个指针,而又不能对对象的类型做任凭假设。还有就是从函数返回一个无类型的对象。要使用这样的对象。必须通过显式的类型转换。

2,到函数的指针与到成员的指针都不能赋给void*
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  编译器