C++ 指向 Void 的指针
在 C++ 中,不能将一种数据类型的变量地址赋值给另一种数据类型的指针。
// 指针是int类型
int *ptr;
// 变量为双精度类型
double d = 9.0;
// 错误
// 无法将 double* 分配给 int*
ptr = &d;
错误发生是因为地址是double
类型变量。但是,指针是int
类型的。
在这种情况下,我们可以在 C++中使用指向 void的指针(void pointers)。
// 空指针
void *ptr;
double d = 9.0;
// 有效代码
ptr = &d;
void 指针是一种通用指针,当不知道指针指向的变量的数据类型时使用。
示例1(C++空指针):
#include <iostream>
using namespace std;
int main() {
void* ptr;
float f = 2.5f;
// 将float地址分配给 void
ptr = &f;
cout << &f << endl;
cout << ptr << endl;
return 0;
}
结果:
与void
空类型一样,void 指针不能被取消引用。
void* ptr;
float* fptr;
float f = 2.5;
// 将float地址分配给 void 指针
ptr = &f;
cout << *ptr << endl; // 错误
// 将float地址分配给float指针
fptr = &f;
cout << *fptr << endl; //有效
示例2(打印Void指针的内容):
要打印 void 指针的内容,使用static_cast
运算符。它将指针从void*
类型转换为指针存储的地址的相应数据类型:
#include <iostream>
using namespace std;
int main() {
void* ptr;
float f = 2.5f;
// 将float地址分配给 void 指针
ptr = &f;
cout << "指针的内容为";
//使用类型转换打印指针内容
cout << *(static_cast<float*>(ptr));
return 0;
}
结果:
也可以使用 C 风格的转换来打印值。
// 有效
cout << *((float*)ptr);
Note:void 指针不能用于存储带有 const 或 volatile 限定符的变量的地址。
void *ptr;
const double d = 9.0;
// 错误:从 const void* 到 void* 的无效转换
ptr = &d;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)