24.联合union-匿名联合
#include <stdio.h> //fopen函数的包 #include <stdlib.h> //exit()函数的包 #include <string.h> //定义结构 struct Person{ char id; int name [4]; double score; }; //定义一个联合 union UPerson{ char id; //1 int name [2]; //4*4 double score; //8 }; //匿名联合 struct Owner{ char age; double score; //匿名联合 union { int uid; char *uname; }; //匿名结构 struct { int sid; char *sname; }; //int age; }; int main() { //结构实例化 struct Person one = { .id='a', .name={1, 2, 3, 4}, .score=1.987 }; //联合实例化 union UPerson uone; union UPerson utwo = {.name = {6,8}}; //操作成员变量 uone.id = 'b'; uone.name[0] = 1; uone.name[1] = 1; uone.score = 19.88; printf("uone.id=%c\n", uone.id ); printf("uone.name=%d======size:%zd\n", uone.name[0], sizeof(uone.name) ); printf("%f\n", uone.score ); printf("utwo-name:%d\n", *(utwo.name+1) ); printf("utwo-id:%d\n", utwo.id ); /*1.什么是联合Union a.是一种数据类型,可以在内存中存储不同的数据类型(不是同时存储) 2.与结构的区别 a.union的大小由它的成员数据类型决定,确保能存储下最大成员变量的字节数 b.每次只能给union中的一个成员变量赋值 3.union就像一个可以存储多种类型的数据类型,每次为成员变量赋值都会把上次的值覆盖掉 */ printf("查看结构的大小:%zd===id:%zd===name:%zd===score:%zd\n", sizeof(struct Person), sizeof(char), 4*sizeof(int), sizeof(double) ); printf("查看结构实例化的大小:%zd===id:%zd===name:%zd===score:%zd\n", sizeof(one), sizeof(one.id), sizeof(one.name), sizeof(one.score) ); printf("查看联合的大小:%zd\n", sizeof(union UPerson) ); printf("查看联合实例的大小:%zd\n", sizeof(uone) ); //匿名联合与匿名结构 //使用场景结构中成员为结构或者union时 struct Owner zhang = { .age = 'a', .score = 18.88, //.uid = 1, .uname = "union", .sid = 2, .sname = "struct" }; printf("匿名union中的uname:%s\n", zhang.uname ); printf("匿名struct中的uname:%s\n", zhang.sname ); return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· 字符编码:从基础到乱码解决
· SpringCloud带你走进微服务的世界