在C中使用一个typedef来处理两种不同的数据类型?

在C中使用一个typedef来处理两种不同的数据类型?,c,struct,typedef,C,Struct,Typedef,如果我下面有一个结构,如果我不知道它将指向的对象的类型,我可以使用void**指针吗 typedef struct A { ... many other things defined here void ** pointer; }; 如果指针数组可以是int或struct,是否可以将两者封装在上面的单个typedef中?我能想到的最好的解决方案是制作两种不同的TypeDef,每种都可以容纳任何一种可能性: typedef struct A { ... many other

如果我下面有一个结构,如果我不知道它将指向的对象的类型,我可以使用void**指针吗

typedef struct A {
   ... many other things defined here 
   void ** pointer; 
};
如果指针数组可以是int或struct,是否可以将两者封装在上面的单个typedef中?我能想到的最好的解决方案是制作两种不同的TypeDef,每种都可以容纳任何一种可能性:

typedef struct A {
   ... many other things defined here 
   struct A ** pointer_struct; 
   int ** pointer_int; 
};

typedef struct B {
   ... same many other things defined here 
   int ** pointer_int; 
};
或者是一个包含指针int或指针struct null两种可能性的单一结构:

typedef struct A {
   ... many other things defined here 
   struct A ** pointer_struct; 
   int ** pointer_int; 
} ;   

将它们封装在一个
联合体{int**i;struct B**B;}
int**
struct a**
都可以转换为
void*
,但不能转换为
void**
。结构定义不应该是“typedef”。这样一个typedef的结果是使代码变得混乱,可能(并且经常)产生误导,并使编译器名称空间变得混乱。建议在需要引用结构名的地方使用“结构标记名”。并删除typedef修改器和name。Union是一个所有成员偏移量都等于零的结构。没什么了,所以在空间/时间上没有开销。@user3629249:您在对其他问题的评论中说过(“不要在结构定义上使用typedef”)。我以前不同意你的观点,因为虽然有些人会同意你的观点,但也有很多人不同意——包括我在内。当我发现你在发表评论时没有说明这是一种观点,而且不是每个人都同意它,我将不得不反驳你的评论,这样新手就不会留下错误的印象。