有没有办法比较两个void指针在C中断言相同的类型?

occ*_*lum 9 c assert pointers void

我正在学习C并在C​​中尝试粗略实现链表.长话短说我有一个只包含一个void指针(元素)的结构和另一个指向下一个节点的指针.(代码要遵循)我的问题是,当通过时头节点和其他一些节点成新函数,有没有办法确保两个元素属于同一类型?两个节点应该能够保存任何类型的数据.我已经尝试与sizeof()进行比较,但我无法顺从void指针.提前致谢!

struct Node{
    void* element;
    struct Node* next;
}
Run Code Online (Sandbox Code Playgroud)

这是节点的代码,我只需要一种方法将它们与assert进行比较,以确保链接列表具有所有相同的元素类型!谢谢!

Jer*_*fin 9

不 - 你通常想要避免像这样的设计,但是如果你真的无法避免它,你通常需要在节点中放置一个枚举来告诉你它包含的数据类型.

  • 更好的方法可能是使用类似`typedef struct {enum type type; int i; 整数;`对于你需要的每个类型(其中`enum type`为每个`struct`定义一个不同的值)并使用这些类型而不是原始整数 - 但是你在技术上不使用`void*`但是一个"枚举类型*",你也可以将其明确化.如果您选择这种方法,如果您居住在宏合法的国家/地区,一些宏(或x宏)可以减少一些重复. (3认同)
  • 当然 - 你基本上只做`enum types {T_CHAR,T_SHORT,T_INT,T_LONG,T_FLOAT,T_DOUBLE};`(用你喜欢的任何其他类型的名字),并设置你对应的类型的值存储.最大的问题是扩展它(每次添加另一种类型存储时都必须编辑`enum`).除此之外(通常)需要一个switch语句`switch(type){case T_CHAR:use_char((char)x.value); case T_SHORT:use_short((short)x.value);/*...*/}` (2认同)