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

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

执行结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

WendyWJGu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值