C 知道列表元素的数据类型

C 知道列表元素的数据类型,c,data-structures,C,Data Structures,我有5个元素的列表。我得到这个列表的第一个元素。我怎么知道这个元素char*或int*的数据类型是什么 谢谢你在C语言中,没有(可移植的)方法来确定你所拥有的是不是一个空*。因此,当您将元素存储到列表中时,您必须自己跟踪它。另一种可能是使用特定于类型的列表,而不是通用的void*列表。这里的“列表”是什么意思 是: sometype* lst; i、 e.阵列,或: node* lst; 链表 在第一种情况下,sometype定义数组中元素的类型,除非它是某种类型的void*,这意味着

我有5个元素的列表。我得到这个列表的第一个元素。我怎么知道这个元素char*或int*的数据类型是什么

谢谢你

在C语言中,没有(可移植的)方法来确定你所拥有的是不是一个空*。因此,当您将元素存储到列表中时,您必须自己跟踪它。另一种可能是使用特定于类型的列表,而不是通用的void*列表。

这里的“列表”是什么意思

是:

   sometype* lst;
i、 e.阵列,或:

node* lst;
链表

在第一种情况下,
sometype
定义数组中元素的类型,除非它是某种类型的
void*
,这意味着编译器不知道类型,但程序员(希望)知道。在第二种情况下,您应该查看
节点的定义,它应该包含具有某种类型的键入信息的数据(上面的
void*
参数适用)。

您不能

使用特定于类型的列表(一个列表用于char指针,一个列表用于int),或者使用结构或联合存储两种类型的值,并使用一个指示类型的字段,如下所示:

#define TYPE_INT    1
#define TYPE_STRING 2

struct MyValue
{
int type;        // TYPE_INT or TYPE_STRING
union
   {
   char *str;
   int   i;
   } value;
};
并将此结构存储到列表中

如果C++是一种选项,考虑使用STD::Listar来存储类型特定的数据,或者如果不可能,定义一个类似于上面结构的类,其中屏蔽不同的数据类型,例如(不包括类型上的错误检查):


您在列表中存储的是什么类型?这是同一类型的。或者您可以发布一些代码来显示您是如何创建列表的?C中没有标准的列表结构,因此您应该扩展您正在使用的结构。为什么不使用
enum
而不是
#define
?@Georg,这是因为在我以前的C时代,我们不能使用enum,只能使用defines。我同意,枚举更好。
class MyValue
   {
   public:
      enum ValueType
         {
         TYPE_NONE;
         TYPE_INT,
         TYPE_STRING
         };
      MyValue() : m_type(TYPE_NONE) {}
      MyValue(char *s) : m_type(TYPE_STRING), m_value.str(s) {}
      MyValue(int i) : m_type(TYPE_INT), m_value.int(i) {}
      ValueType getType() const {return m_type;}
      const char *getString() const {return m_value.str;}
      int getInt() const {return m_value.int;}
   private:
      ValueType m_type;
      union InternalValue
         {
         char *str;
         int   i;
         };
      InternalValue m_value;
   };