我有三个结构共享第一个字段的第一个类型和名称:
struct TYPEA {
char *name;
int x,y; /*or whatever*/
};
struct TYPEB {
char *name;
float a[30]; /*or whatever*/
};
struct TYPEC {
char *name;
void *w,*z; /*or whatever*/
};
如果我没记错的话,结构的第一个字段必须从与结构本身相同的地址开始。
这让我想知道工会是否同样适用:
union data {
struct TYPEA;
struct TYPEB;
struct TYPEC;
};
union data *p = function_returning_a_sane_default_for_union_data();
printf("%s", (char*) p);
我对此有两个问题:
- 标准是否要求工会始终将其内容放在同一地址?
- 如果结构都具有相同的字段,那么它会起作用吗?只是名称不同?