cpp-void型指针

下面这个函数什么意思:

1
2
3
void* foo(void* a){
return a;
}

他表示foo接受任何类型的指针,并输出任何类型的指针。使用方式总结如下:

1. void指针可以指向任何类型指针,但反过来就不对了

1
2
3
4
float f = 5.5;
float* pf = &f;
void* pv = pf; // void指针可以指向float型指针
float* pf2 = pv; // 错,float指针不能指向void指针

2.void指针只有强制转换类型后才可以取值,而且要转换成所保存地址中,内容的类型

1
2
3
4
5
6
float x = 4;
void* yv = foo(&x);
cout<<yv<<" "<<*(float*)yv<<endl; // 返回0x7ffc78a54e1c 4
//cout<<*yv<<endl; // 编译错误
cout<<*(double*)yv<<endl; // 返回1.44068e+273。返回值错误
cout<<(double)(*(float*)yv)<<endl; // 返回4。正确

3. void指针可以使用nullptr初始化

1
2
void* vPtr = nullptr;
cout<<*vPtr<<endl; // 编译错误,vPtr不指向任何对象,所以取不到任何内容

4. 接受任何类型的指针,并输出任何类型的指针

1
2
3
void* vPtr = nullptr;
void* vFunPtr = foo(vPtr);
cout<<vFunPtr<<endl; // 空指针,所以返回0