我想这样做:
int main () {
bla bla bla
void *onetype;
switch (USER_INPUT_TYPE) {
CASE CONVERT_TO_CHAR:
convert onetype VOID TO CHAR >>> HOW???
CASE CONVERT_TO_INT:
convert onetype VOID TO INT >>> HOW???
LOT OF CASES...
}
}
是的,我知道类型转换,但是类型转换是一种“临时”改变。
那么,有没有办法在C中完成它?
编辑:
停止停止!请看,你在做什么是类型转换,我知道,你正在创建另一个所需类型的变量,如int i =(int)onetype,我不想要这个,我想要其他像onetype =(int )ontyype,不重新创建它们,不分配另一个变量。
非常感谢你们!
答案 0 :(得分:7)
您想要的是运行时类型信息 - 要有一个变量,其中类型只能在运行时确定。 C在语言中没有此功能 - 一旦编译程序,类型将被删除,并且只存在内存blob。动态语言维护类型信息并在本地实现。
您可以设计自己的本土类型标记系统:
typedef union {
int i;
char c;
float f;
} evil;
typedef struct {
evil value;
int type;
} tagged_t;
enum {
TYPE_INT, TYPE_CHAR, TYPE_FLOAT
};
tagged_t bar;
bar.value.c = 'a';
bar.type = TYPE_CHAR;
现在,每当您希望使用tagged_t类型时,必须为要存储的每种可能类型的变量实现一个条件,或者能够确定是否允许在该代码区域中使用某种类型。
答案 1 :(得分:1)
听起来您的情况如下
void* onetype
包含指向强类型变量的指针USER_INPUT_TYPE
告诉您该变量的类型如果是这种情况,请尝试以下
switch (USER_INPUT_TYPE) {
case CONVERT_TO_CHAR:
char c = *((char*)onetype);
...
break;
case CONVERT_TO_INT:
int i = *((int*)onetype);
...
break;
}
答案 2 :(得分:0)
int lolcakes = *(void*)onetype;
这假设您确定onetype指向int。使用这种类型的铸件非常不安全。