-1

我正在为一种编程语言制作解释器,并且我正在研究堆栈,但我无法找到一个可以包含多种数据类型的动态结构的简单解决方案。我需要能够在结构中存储多种数据类型,例如整数、长整数、字符串等。

4

2 回答 2

1

构建此类数据结构的一种相对简单的方法是使用 a union,如下所示:

union AnyType {
    int int_val;
    long long long_val;
    float float_val;
    double int_val;
    char char_val;
    char *char_prt;
};

但是,这可能不是最经济的,因为这种结构的大小等于最大数据类型的大小。更好的方法是为您的堆栈使用“原始”内存块,动态地将其部分分配给堆栈上的元素。但是,您需要注意数据的对齐方式,以避免将多字节数据放置在会使访问速度变慢或导致运行时错误的偏移处。

于 2013-10-20T19:43:51.597 回答
0

您可以使用联合:

union someUnion
{
  int a;
  long int b;
  char *string;
  //...any other needed type 
}

请查看此链接了解详细信息。Union 通常用于解释器和编译器的实现,例如在 yacc (bison) 和 lex 中。顺便说一句,您可以检查它们,这些可以大大简化解释器的编码。

于 2013-10-20T19:43:06.313 回答