我很难理解union
C 中的使用。我在这里阅读了很多关于这个主题的帖子。但是他们都没有解释为什么union
可以使用结构来实现相同的目标。
引用 K&R
作为编译器符号表管理器中的示例,假设常量可能是 int、float 或字符指针。特定常量的值必须存储在适当类型的变量中,但如果该值占用相同的存储量并且无论其类型如何都存储在相同的位置,则最方便表管理。这是联合的目的,单个变量可以合法地保存多种类型中的任何一种。语法基于结构:
union u_tag {
int ival;
float fval;
char *sval;
} u;
用法将是
if (utype == INT)
printf("%d\n", u.ival);
if (utype == FLOAT)
printf("%f\n", u.fval);
if (utype == STRING)
printf("%s\n", u.sval);
else
printf("bad type %d in utype\n", utype);
同样的事情可以使用结构来实现。就像是,
struct u_tag {
utype_t utype;
int ival;
float fval;
char *sval;
} u;
if (u.utype == INT)
printf("%d\n", u.ival);
if (u.utype == FLOAT)
printf("%f\n", u.fval);
if (u.utype == STRING)
printf("%s\n", u.sval);
else
printf("bad type %d in utype\n", utype);
这不一样吗?有什么优势union
?
有什么想法吗?