Jar*_*Par 16
当a struct包含union成员时,它通常作为节省空间的机制完成.如果struct可以是某些子类型,只有某些成员才有效,那么a union是不浪费空间的好方法.
例如
enum NumberKind {
Integer,
FloatingPoint
};
struct Number {
NumberKind kind;
union {
int integerValue;
float floatValue;
};
};
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我定义了一个struct可以具有数值类型类型的数字:浮点数和整数.同时拥有两者并不是有效而不是浪费空间,因为两个成员总是被定义,我创建了一个union使得两者的存储量等于最大值的大小.
根据要求提供上面的样品使用
void PrintNumber(Number value) {
if (value.kind == Integer) {
printf("%d\n", value.integerValue);
} else {
printf("%f\n", value.floatValue);
}
}
Run Code Online (Sandbox Code Playgroud)