C中是否有规定从其指针中查找结构类型

Gin*_*cob 3 c struct pointers

如果我们有两种类型的结构,例如apple和orange,它们的实例为a1和o1,那么我们有一个指向void类型的指针那么有没有办法知道它指向什么类型的结构?...

Alm*_*lmo 6

C不会在运行时维护此类信息.所以你运气不好,我很害怕.


kfb*_*kfb 5

不是没有大量的黑客攻击.如果您可以控制源代码,您可以将这些信息放入结构中:

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.