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;
} 展开
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;
} 展开
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还是很大可能性有面临清空指令流水线的危险.一旦发生没预测到的跳转.将严重影响效率.还不如增加一个参数.
将 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还是很大可能性有面临清空指令流水线的危险.一旦发生没预测到的跳转.将严重影响效率.还不如增加一个参数.
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询