C 具有这种数据结构的联合功能。联合在外观上类似于结构,但联合中的每个成员占用相同的内存位置。然后在下面的示例中使用另一个字段,type
以便您知道如何解释该结构。
使用它,您可以解决您的问题而无需任何转换,并保持编译时类型安全。
这是一个完整的例子:
#include <stdio.h>
#include <string.h>
#define TYPE_A 1
#define TYPE_B 2
struct A
{
char member1[8];
char member2[8];
};
struct B
{
char member1[16];
char member2[16];
};
struct base
{
int type;
union
{
struct A a;
struct B b;
} data;
};
char *get_member2(struct base *buff)
{
if (buff->type == TYPE_A)
return buff->data.a.member2;
if (buff->type == TYPE_B)
return buff->data.b.member2;
return NULL;
}
int main(void)
{
struct base b1;
struct base b2;
/* Set up test structs. */
b1.type = TYPE_A;
strcpy(b1.data.a.member2, "Hello");
b2.type = TYPE_B;
strcpy(b2.data.b.member2, "World");
/* Print member2 from each struct. */
printf("%s\n", get_member2(&b1));
printf("%s\n", get_member2(&b2));
return 0;
}
输出:
Hello
World
代码:键盘