在C中使用一个typedef来处理两种不同的数据类型?
如果我下面有一个结构,如果我不知道它将指向的对象的类型,我可以使用void**指针吗在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
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”)。我以前不同意你的观点,因为虽然有些人会同意你的观点,但也有很多人不同意——包括我在内。当我发现你在发表评论时没有说明这是一种观点,而且不是每个人都同意它,我将不得不反驳你的评论,这样新手就不会留下错误的印象。