我有5个元素的列表。我得到这个列表的第一个元素。我怎么能知道这个元素char *或int *的数据类型是什么?
谢谢
答案 0 :(得分:1)
在C中,没有(便携式)方法可以找出你所拥有的是否为空*。因此,当您将元素存储到列表中时,您必须自己跟踪它。另一种可能性是使用特定于类型的列表而不是通用的void *列表。
答案 1 :(得分:1)
你不能。
使用特定于类型的列表(一个列表用于您的指针,一个列表用于您的整数)或使用结构或联合来存储两种类型的值和一个指示类型的字段,如下所示:
#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 :: list存储特定于类型的数据,或者如果这不可能,请定义一个类似上面结构的类,在该类中屏蔽不同的数据类型,如下所示(不包括错误检查类型):
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;
};
答案 2 :(得分:0)
这里的“列表”是什么意思?
是吗:
sometype* lst;
即。数组,或:
node* lst;
链表?
在第一种情况下,sometype
定义数组中元素的类型,除非它是某种void*
,这意味着编译器不知道类型而是程序员(希望如此)确实。在第二种情况下,您应该查看node
的定义,它应该包含具有某种类型的输入信息的数据(并且上面的void*
参数适用)。