我正在编写一个编程语言的解释器,我正在处理堆栈,但我无法为动态结构找到一个简单的解决方案,它可以包含多种数据类型。我需要能够在结构中存储多个数据类型,例如整数,长整数,字符串等。
答案 0 :(得分:1)
构建此类数据结构的一种相对简单的方法是使用union
,如下所示:
union AnyType {
int int_val;
long long long_val;
float float_val;
double int_val;
char char_val;
char *char_prt;
};
这可能不是最经济的,因为这种结构的大小等于最大数据类型的大小。更好的方法是为堆栈使用“原始”内存块,动态地将其部分分配给堆栈上的元素。但是,您需要注意数据的对齐,以避免将多字节数据放在偏移处,这会使访问速度变慢或导致运行时错误。
答案 1 :(得分:0)
您可以使用union:
union someUnion
{
int a;
long int b;
char *string;
//...any other needed type
}
请查看this link了解详情。联盟通常用于实施口译员和编译器,例如在yacc(野牛)和lex。顺便说一句,你可以检查它们,这些可以简化解释器的编码。