【C语言】共用体 [ 编程杂谈 ]
大数据男孩 文章 正文
明妃
{{nature("2022-08-14 17:23:19")}}更新共用体定义
共用体
与结构体
有类似
的地方
// 结构体
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;
}
[]()
{{nature('2020-01-02 16:47:07')}} {{format('12641')}}人已阅读
{{nature('2019-12-11 20:43:10')}} {{format('9527')}}人已阅读
{{nature('2019-12-26 17:20:52')}} {{format('7573')}}人已阅读
{{nature('2019-12-26 16:03:55')}} {{format('5017')}}人已阅读
目录
标签云
一言
评论 0
{{userInfo.data?.nickname}}
{{userInfo.data?.email}}