【万能指针】
一个指向任何对象类型的指针都可以赋值给类型为void*的变量,void*可以赋值给另外一个void *,俩个void *可以比较相等与否,而且可以显式地将void*转换到另一个类型。其他操作都是不安全的,因为编译器并不知道实际被指向的是那种对象。因此,对void*做其他任何操作都将引起编译错误。要使用void * 我们就必须显示地将它转换到某个指向特定类型的指针。例如,
void f(int *pi)
{
void *pv = pi;//可以:从int * 到 void *的隐式转换。
*pv; // 错误 void*不能间接引用
pv ++; //错误 void *不能增量(不知道被指向对象的大小。)
int *pi2 = static_cast<int *>(pv);//显式转换回int *
double* pd1 = pv; //错误
double* pd2 = pi ;//错误
double* pd3 = static_cast<double *>(pv);//不安全。
}
void * 最重要用途是需要向函数传递一个指针,而又不能对对象的类型做出任何假设。还有就是从函数返回要给无类型的对象。要使用这样的对象,必须通过显式类型转换。
采用void*的函数通常存在于系统中很低的层次里,在哪里需要操作某些真实的硬件资源。
void * my_alloc(size_t n);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)