? ? ? ?C和C++对待指向void的指针有所不同。在这两种语言中,都可以把任何类型的指针赋给void类型的指针。
? ? ? ?例如在C语言中可以直接把double*指针赋值给void*指针,但是C++要求在把void*指针赋值给任何类型的指针时,必须进行强制类型转换,而C没有这样的要求。
? ? ? ? ? ? ? ?如: const double* a1 = (const double*)p1;
? ? ? ? 在把void类型指针p1赋值给double类型的指针的时候,必须使用类型强转。这种强制类型转换,在C中时可选的,但是在C++中是必须的。因为两种语言都使用强制类型转换,但是要遵循C++的要求。
示例源码:
// Len_voidptr.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include <iostream>
struct Student
{
int age;
int fex;
char name[24];
};
enum TYPE
{
TYPE_DOUBLE = 1,
TYPE_INT = 2,
TYPE_STUDENT =3
};
int GetData(void* p1, TYPE Type)
{
if (Type == TYPE_DOUBLE)
{
double data = *(double*)p1;
printf("\n\n TYPE_DOUBLE:\tdata = %.2lf", data);
return 1;
}
else if (Type == TYPE_INT)
{
int data = *(int*)p1;
printf("\n\n TYPE_INT:\tdata = %d", data);
return 1;
}
else if (Type == TYPE_STUDENT)
{
Student data = *(Student*)p1;
printf("\n\n TYPE_STUDENT:\tdata = %d, %d, %s", data.age, data.fex, data.name);
return 1;
}
return 0;
}
int main()
{
double data1 = 5.5;
int data2 = 100;
Student stu = { 23, 1, "张小菜" };
GetData((void*)&data1, TYPE_DOUBLE);
GetData((void*)&data2, TYPE_INT);
GetData((void*)&stu, TYPE_STUDENT);
}
执行结果: