C:只要知道变量的地址

时间:2017-06-30 13:09:57

标签: c types

在C中,是否可以通过知道其地址来找到变量的数据类型?

例如,我正在尝试创建一个类型的表:

{
    int id,
    void *ptr_to_var,
    float conversion
}


/*Id  Variable  Conversion_formula*/
{
  {0x01, &var_1,  0.4},
  {0x05, &var_2,  0.2}
} 

......等等

然后,我需要访问这些变量的内容并应用一些转换。 变量(var_1,var_2)可以在具有不同数据类型的地方声明。

2 个答案:

答案 0 :(得分:5)

如果变量的数据类型为void*,则无法找出变量的数据类型。这种无能力驱动了C库API中的许多设计决策,例如需要在scanf中为仅在长度上有所不同的类型提供匹配的格式说明符(floatdouble,{{ 1}}与int对比short等等。)

为了使这个决定成为可能,调用者需要以某种方式提供特定的类型信息,例如

long long

答案 1 :(得分:0)

不 - 你需要存储指针的类型。你不能神奇地发现它。

作为一种不是普通的C类解决方法,你可以使用面向对象的编程并定义一个接口来访问未知的子类