如果我们有两种类型的结构,例如apple和orange,它们的实例为a1和o1,那么我们有一个指向void类型的指针那么有没有办法知道它指向什么类型的结构?...
不是没有大量的黑客攻击.如果您可以控制源代码,您可以将这些信息放入结构中:
typedef enum {
STRUCT_TYPE_APPLE,
STRUCT_TYPE_ORANGE
} _struct_type;
typedef struct {
_struct_type type;
/* Your "apple" data */
} apple;
typedef struct {
_struct_type type;
/* Your "orange" data */
} orange;
Run Code Online (Sandbox Code Playgroud)
然后,您可以在调试期间转换为适当的类型并检查其值type.当然,这充满了脆弱性.值得注意的是,如果你不确定你将获得什么类型的结构,那么铸造和检查type很可能会得到具有相同STRUCT_TYPE_APPLE或更高价值的东西STRUCT_TYPE_ORANGE.