【发布时间】:2010-07-28 11:02:48
【问题描述】:
我很难理解 union 在 C 中的使用。我在这里阅读了很多关于这个主题的帖子。但是他们都没有解释为什么union 在使用结构可以实现相同的事情时是首选。
引自 K&R
作为可能找到的示例 在编译器符号表管理器中, 假设一个常数可能是一个 int, 浮点数或字符指针。这 特定常数的值必须是 存储在适当的变量中 类型,但它最方便 如果值占用,则表管理 相同的存储量并且是 存储在同一个地方,无论 它的类型。这是一个目的 联合一个单一的变量,可以 合法持有其中任何一项 几种类型。语法基于 结构:
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 有什么优势?
有什么想法吗?
【问题讨论】:
标签: c data-structures struct unions