我如何在C中将类型的变量更改为另一个?

我要做:

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,无需重新创建它们,无需分配另一个变量。

非常感谢!

你想要的是运行时类型信息 – 有一个变量,其中类型只能在运行时确定。 C在语言中没有此function – 一旦编译程序,类型将被删除,并且只存在内存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类型时,必须为要存储的每种可能类型的变量实现一个条件,或者能够确定是否在该代码区域中允许某种类型。

听起来你的情况如下

  • 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; } 
 int lolcakes = *(void*)onetype; 

这假设您确定onetype指向int。 使用这种类型的铸件是非常不安全的。