编程杂谈

共用体定义共用体与结构体有类似的地方//结构体structBoy{intid;charname[20];doubleage;};//共用体unionboy{intid;charname[20];doubleage;};//共用体可以不需要名称union{intid;charname[20];doubleage;}boy,a;共用体初始化初始化只能给其中一个元素赋值//定义时初始化unionBoy{intid;charname[20];doubleage;}boy={.name="大数据男孩",};//直接初始化第一个成员unionBoyboy={1};//用另一个共用体初始化unionBoyb=boy;//初始化指定成员unionBoyo={.name="大数据男孩"};共用体里元素的地址共用体里面元素共用一个地址#include<stdio.h>#include<string.h>//共用体、结构体在初始化之后赋值,需要用到该库函数//共用体unionBoy{intid;charname[20];doubleage;};intmain(void){unionBoyboy;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);return0;}共用体里元素的值因为共用体里元素的地址是一样的,所以只能输出最后赋值元素的值#include<stdio.h>#include<string.h>//共用体、结构体在初始化之后赋值,需要用到该库函数//公用体unionBoy{intid;charname[20];doubleage;};intmain(void){unionBoyboy;//赋值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);return0;}共用体的内存占用这里内存占用,涉及到与结构体一样的内存对齐#include<stdio.h>#include<string.h>//共用体、结构体在初始化之后赋值,需要用到该库函数//公用体unionBoy{intid;charname[20];doubleage;};intmain(void){unionBoyboy;//赋值boy.id=1;strcpy(boy.name,"大数据男孩");//不管是结构体、共用体,只有在初始化时才能直接对字符串赋值。boy.age=18.55;//打印共用体元素的内存占用printf("boy.idsizeof:%llu\n",sizeof(boy.id));printf("boy.namesizeof:%llu\n",sizeof(boy.name));printf("boy.agesizeof:%llu\n",sizeof(boy.age));//打印共用体的内存占用printf("boysizeof:%llu\n",sizeof(boy));return0;}

2021-1-10 722 0