共用体也称联合体。
和结构体还是有点像:
- union 共用体名称
- {
- 成员1;
- 成员2;
- 成员3;
- };
但是两者有本质的不同。共用体的每一个成员共用一段内存,那么这也就意味着它们不可能同时被正确地访问。如:
- //Example 05
- #include <stdio.h>
- #include <string.h>
- union Test
- {
- int i;
- double pi;
- char str[9];
- };
- int main(void)
- {
- union Test test;
- test.i = 10;
- test.pi = 3.14;
- strcpy(test.str, "TechZone");
- printf("test.i: %d\n", test.i);
- printf("test.pi: %.2f\n", test.pi);
- printf("test.str: %s\n", test.str);
- return 0;
- }
执行结果如下:
- //Consequence 05
- test.i: 1751344468
- test.pi: 3946574856045802736197446431383475413237648487838717723111623714247921409395495328582015991082102150186282825269379326297769425957893182570875995348588904500564659454087397032067072.00
- test.str: TechZone
可以看到,共用体只能正确地展示出最后一次被赋值的成员。共用体的内存应该要能够满足最大的成员能够正常存储。但是并不一定等于最大的成员的尺寸,因为还要考虑内存对齐的问题。
共用体可以类似结构体一样来定义和声明,但是共用体还可以允许不带名字:
- union
- {
- int i;
- char ch;
- float f;
- } a, b;
|