在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)可以在具有不同数据类型的地方声明。
答案 0 :(得分:5)
如果变量的数据类型为void*
,则无法找出变量的数据类型。这种无能力驱动了C库API中的许多设计决策,例如需要在scanf
中为仅在长度上有所不同的类型提供匹配的格式说明符(float
与double
,{{ 1}}与int
对比short
等等。)
为了使这个决定成为可能,调用者需要以某种方式提供特定的类型信息,例如
long long
答案 1 :(得分:0)
不 - 你需要存储指针的类型。你不能神奇地发现它。
作为一种不是普通的C类解决方法,你可以使用面向对象的编程并定义一个接口来访问未知的子类