当前位置: 首页 > news >正文

C语言联合体&枚举

联合体(共用体)

联合体类型的声明

  • 联合体由一个或多个成员构成,成员可以是不同类型
  • 编译器只为最大的成员分配足够的内存空间
  • 所有成员共用同一块内存空间
  • 给其中一个成员赋值,其他成员的值也会变化
#include<stdio.h>// 联合类型的声明unionUn{charc;inti;};intmain(){// 联合变量的定义unionUn un={0};// 计算变量的大小printf("%d\n",sizeof(un));// 输出:4return0;}

特点

  • 成员共用同一块内存空间
  • 联合变量的大小至少是最大成员大小

地址验证

#include<stdio.h>unionUn{charc;inti;};intmain(){unionUn un={0};printf("%p\n",&(un.i));// 三个地址相同printf("%p\n",&(un.c));printf("%p\n",&un);return0;}

内存共享验证

#include<stdio.h>unionUn{charc;inti;};intmain(){unionUn un={0};un.i=0x11223344;un.c=0x55;printf("%x\n",un.i);// 输出:11223355return0;}

相同成员的结构体和联合体对比

  • 结构体
structS{charc;inti;};structSs={0};
  • 各成员有独立的内存空间

  • 存在内存对齐,可能有浪费的空间

  • 联合体

unionUn{charc;inti;};unionUn un={0};

联合体大小的计算规则

  • 联合的大小至少是最大成员的大小
  • 当最大成员大小不是最大对齐数的整数倍时,要对齐到最大对齐数的整数倍
#include<stdio.h>unionUn1{charc[5];// 大小5,对齐数1inti;// 大小4,对齐数4};unionUn2{shortc[7];// 大小14,对齐数2inti;// 大小4,对齐数4};intmain(){printf("%d\n",sizeof(unionUn1));// 输出:8(对齐到4的倍数)printf("%d\n",sizeof(unionUn2));// 输出:16(对齐到4的倍数)return0;}

联合体应用示例

structgift_list{intstock_number;// 库存量doubleprice;// 定价intitem_type;// 商品类型union{struct{chartitle[20];// 书名charauthor[20];// 作者intnum_pages;// 页数}book;struct{chardesign[30];// 设计}mug;struct{chardesign[30];// 设计intcolors;// 颜色intsizes;// 尺寸}shirt;}item;};

联合体判断大小端

intcheck_sys(){union{inti;charc;}un;un.i=1;returnun.c;// 返回1是小端,返回0是大端}

枚举类型

声明

  • 枚举就是把可能的取值一一列举
enumDay// 星期{Mon,// 默认值:0Tues,// 默认值:1Wed,// 默认值:2Thur,// 默认值:3Fri,// 默认值:4Sat,// 默认值:5Sun// 默认值:6};enumSex// 性别{MALE,// 默认值:0FEMALE,// 默认值:1SECRET// 默认值:2};enumColor// 颜色{RED,// 默认值:0GREEN,// 默认值:1BLUE// 默认值:2};// 可以自定义初始值enumColor{RED=2,GREEN=4,BLUE=8};

枚举类型的优点

  1. 增加代码的可读性和可维护性
  2. 类型检查更严谨(相比#define)
  3. 便于调试(预处理阶段不会删除枚举符号)
  4. 使用方便,一次可以定义多个常量
  5. 遵循作用域规则

枚举类型使用

enumColor{RED=1,GREEN=2,BLUE=4};enumColorclr=GREEN;// 正确:使用枚举常量赋值// clr = 2; // C语言中可以,C++中不行(类型检查严格)

总结

联合体要点

  • 所有成员共享同一内存空间
  • 大小由最大成员和对齐规则决定
  • 适合需要节省内存的场景

枚举要点

  • 提高代码可读性和类型安全性
  • 默认从0开始递增,可自定义初始值
  • 相比#define有更好的调试支持和作用域控制
http://www.jsqmd.com/news/440539/

相关文章:

  • Any Video Downloader:免费全能视频下载利器,8K高清一键保存
  • 2026年比较好的轻钢龙骨公司推荐:防腐轻钢龙骨/装配式轻钢龙骨实力厂家如何选 - 行业平台推荐
  • 【小白笔记】功能函数与主函数的布局
  • 短视频运营资源合集
  • C++游戏开发之旅 24
  • 2026年知名的单轨吊马达公司推荐:气动单轨吊车/单轨吊气动葫芦实力工厂推荐 - 行业平台推荐
  • 体态矫正资源合集
  • 【2026年最新600套毕设项目分享】基于SpringBoot+Vue的知识产权管理系统(14060)
  • 【小白笔记】迭代与递归的区别
  • Mac双开微信终极指南:一台电脑轻松登录两个微信账号 - 指南
  • 在Revit中创建并导入文字渲染模型的步骤详解
  • 北京DeepSeek推广公司有哪些?2026年GEO服务商能力与定位解析 - 品牌2026
  • 计数公式总结
  • 2026年热门的废水处理工程品牌推荐:生活废水处理/VOCs有机废水处理实力厂家如何选 - 行业平台推荐
  • 2026年质量好的工业除湿机工厂推荐:转轮除湿机/除湿机品牌/家用除湿机稳定供应商推荐 - 行业平台推荐
  • 云主机ubuntu24上安装openclaw操作步骤详解,避坑指南
  • 北京豆包广告服务商有哪些?2026年主流GEO机构能力梳理 - 品牌2026
  • 北京DeepSeek服务商有哪些?2026年主流GEO机构能力梳理 - 品牌2026
  • 腾讯云主机上超级简单的安装openclaw方法
  • 2026年口碑好的蒸汽消音器公司推荐:吹管消音器/蒸汽加热消音器厂家推荐哪家好 - 行业平台推荐
  • 2026年知名的铝业用硝酸钠厂家推荐:陶瓷用硝酸钠厂家推荐参考 - 品牌宣传支持者
  • C#/.NET/.NET Core优秀项目和框架2026年2月简报
  • DeepSeek推广怎么做?2026年主流GEO服务商能力与适配分析 - 品牌2026
  • 2026年评价高的智能液压机工厂推荐:四柱液压机/力位移液压机销售厂家哪家好 - 品牌宣传支持者
  • AI获客如何破局?2026年GEO服务商全景解析与选型指南 - 品牌2026
  • 2026年热门的高压无功补偿柜公司推荐:高压无功补偿装置/高压SVG动态无功补偿装置可靠供应商推荐 - 品牌宣传支持者
  • 2026年口碑好的衣柜灯品牌推荐:全屋定制衣柜灯可靠供应商推荐 - 品牌宣传支持者
  • 2026年质量好的不锈钢合页品牌推荐:子母不锈钢合页/钢质门不锈钢合页厂家推荐哪家好 - 品牌宣传支持者
  • YOLOv11涨点改进| CVPR 2026 |全网独家首发、特征融合改进篇 | 引入 LFSB 差分双维注意融合模块,通过交替特征融合与分离策略,能够精准区分目标特征,顶会助力YOLOv11有效涨点
  • TRAE CN + 方舟 Coding Plan搭建