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