C/C++ 中void指针类型void*的使用

发布时间:2023年12月21日

? ? ? ?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);
}

执行结果:

文章来源:https://blog.csdn.net/wendyWJGU/article/details/135117163
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。