C语言中使用void *指针作函数形参后,如何判断其地址中所存储变量的类型

2025-03-23 01:59:07
推荐回答(1个)
回答1:

不用手动传入的方式只有一种,就是数据本身带有对数据类型的说明,或者有约定的对不同数据格式使用数值空间的划分.如ASCII与Unicode的区别.
将 void* input 指向一个结构体,结构体第一个成员是 enum mytype{int,double,float} type;

调用函数只传input参数.之后立马使用
switch (input->type){
case int:
XXXXX;break;
case double:

XXXXX;break;
case float:
XXXXX;break;
default:printf("type error!");
}
而创建结构体实例的时候.
只需要赋值
struct mystruct mydata{
int,
XXX,
XXXX,
};
如此即可.
看在你提高悬赏的份上,把基本代码都给你打出来了,好好努力吧.
但是我想说的是,用switch这种方法并不好,尽管有编译器代码优化,以及CPU自带的分支预测,但CPU还是很大可能性有面临清空指令流水线的危险.一旦发生没预测到的跳转.将严重影响效率.还不如增加一个参数.