共用体定义
共用体
与结构体
有类似
的地方
// 结构体 struct Boy { int id; char name[20]; double age; }; // 共用体 union boy { int id; char name[20]; double age; }; // 共用体 可以不需要名称 union { int id; char name[20]; double age; } boy, a;
共用体初始化
初始化只能给
其中一个元素赋值
// 定义时初始化 union Boy { int id; char name[20]; double age; } boy = { .name = "大数据男孩", }; // 直接初始化 第一个成员 union Boy boy = {1}; // 用另一个共用体初始化 union Boy b = boy; // 初始化指定成员 union Boy o = {.name = "大数据男孩"};
共用体里元素的地址
共用体里面
元素共用一个地址
#include <stdio.h> #include <string.h> // 共用体、结构体 在初始化之后赋值,需要用到该库函数 // 共用体 union Boy { int id; char name[20]; double age; }; int main(void){ union Boy boy; boy.id = 1; strcpy(boy.name,"大数据男孩"); // 不管是 结构体、共用体,只有在初始化时才能直接对字符串赋值。 boy.age = 18.5; // 打印地址 printf("boy.id: %p\n", &boy.id); printf("boy.name: %p\n",boy.name); printf("boy.age: %p\n", &boy.age); return 0; }
共用体里元素的值
因为共用体里
元素的地址是一样的
,所以只能输出最后赋值元素
的值
#include <stdio.h> #include <string.h> // 共用体、结构体 在初始化之后赋值,需要用到该库函数 // 公用体 union Boy { int id; char name[20]; double age; }; int main(void){ union Boy boy; // 赋值 boy.id = 1; strcpy(boy.name,"大数据男孩"); // 不管是 结构体、共用体,只有在初始化时才能直接对字符串赋值。 boy.age = 18.55; // 打印共用体的值 printf("boy.id: %d\n", boy.id); printf("boy.name: %s\n",boy.name); printf("boy.age: %.2f\n", boy.age); return 0; }
共用体的内存占用
这里内存占用,涉及到与 结构体一样的
内存对齐
#include <stdio.h> #include <string.h> // 共用体、结构体 在初始化之后赋值,需要用到该库函数 // 公用体 union Boy { int id; char name[20]; double age; }; int main(void){ union Boy boy; // 赋值 boy.id = 1; strcpy(boy.name,"大数据男孩"); // 不管是 结构体、共用体,只有在初始化时才能直接对字符串赋值。 boy.age = 18.55; // 打印共用体元素的内存占用 printf("boy.id sizeof : %llu\n", sizeof(boy.id)); printf("boy.name sizeof : %llu\n",sizeof(boy.name)); printf("boy.age sizeof: %llu\n", sizeof(boy.age)); // 打印共用体的内存占用 printf("boy sizeof: %llu\n", sizeof(boy)); return 0; }