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

我想在以下代码中,去掉testpointer函数中的type参数,采用其他办法让程序自动判断输入的数据类型(而不用手动传递参数)。是否有可行的解决方案?谢谢!voidte... 我想在以下代码中,去掉testpointer函数中的type参数,采用其他办法让程序自动判断输入的数据类型(而不用手动传递参数)。是否有可行的解决方案?谢谢!

void testpointer(void* input, int type)
{
cout << "Please input again: " << endl;
switch (type)
{
case 0: cin >> *(int*)input; break;
case 1: cin >> *(char*)input; break;
}
}

int main()
{
int a;

char ch;

cout << "Please input a number:" << endl;

cin >> a;

testpointer(&a,0);

cout << "Please input a character:" << endl;

cin >> ch;

testpointer(&ch,1);
cout << "You inputted: " << endl;

cout << a << endl;

cout << ch << endl;

return 0;

}
展开
 我来答
Jack_Break_BD
推荐于2016-09-07 · 超过14用户采纳过TA的回答
知道答主
回答量:24
采纳率:0%
帮助的人:21.8万
展开全部
不用手动传入的方式只有一种,就是数据本身带有对数据类型的说明,或者有约定的对不同数据格式使用数值空间的划分.如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还是很大可能性有面临清空指令流水线的危险.一旦发生没预测到的跳转.将严重影响效率.还不如增加一个参数.
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式