指向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*
例:
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*
相关文章推荐
- 指向常量的指针,指针常量,void类型指针
- void类型的指针指向结构体,如何用->引用结构体内部元素
- 指向void类型的指针
- void*不是指向对象的类型(这种类型的指针不能指向一个实体)
- C/C++void*_指向指针的指针_范例对比
- 如何获取变量类型及void指针中保存的指针指向什么类型的变量
- void空类型指针仅传地址无指向操作
- 从“void*”到指向非“void”的指针的转换要求显式类型转换错误
- 从"void*"到指向非"void"的指针的转换要求显式类型转换错误
- 指向void的指针
- C/C++学习笔记:指向指针的指针
- void 指针 (转载)
- 指针指向字符串常量和数组存放字符串常量(char *p="abcd", char p[]="abcd")
- 二维数组和指向指针的指针
- upper_bound(a,a+n,k)函数求出的值就表示的是指向满足ai>k的ai的最小指针
- 用指向指针的方法对n个整数排序并输出。
- C++里,在类中使用指向类成员函数的指针
- java 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
- 指向指针的指针
- 通过2级指针改变1级指针的指向