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

⾃定义类型:联合和枚举


乐观学习,乐观生活,才能不断前进啊!!!

我的主页:optimistic_chen
我的专栏:c语言
点击主页:optimistic_chen和专栏:c语言,
创作不易,大佬们点赞鼓励下吧~

前言

与结构体类似,联合体也是一个自定义类型,大家或许在某些地方发现相同之处,二者可以相互借鉴,但不能混淆在一起哦~ ,枚举与二者都不同,敬请期待~

文章目录

  • 前言
  • 联合体类型的声明
    • 联合体的特点
    • 计算联合体的大小
    • 联合体练习
  • 枚举类型的声明
    • 枚举的优势
    • 枚举的使用
  • 5.完结

联合体类型的声明

像结构体⼀样,联合体也是由⼀个或者多个成员构成,这些成员可以不同的类型。
但是编译器只为最⼤的成员分配⾜够的内存空间

#include <stdio.h>
//联合类型的声明
union Un
{char c;int i;
};
int main()
{//联合变量的定义union Un un = { 0 };//计算2个变量的⼤⼩printf("%d\n", sizeof(un));
}

在这里插入图片描述

联合体的特点

联合体的特点是所有成员共⽤同⼀块内存空间。所以联合体也叫:共⽤体这样⼀个联合变量的⼤⼩,⾄少是最⼤成员的⼤⼩(因为联合⾄少得有能⼒保存最⼤的那个成员)

我们可以用内存来阐释这个特点:

union Un
{char c;int i;
};
int main()
{//联合变量的定义union Un un = { 0 };printf("%p\n", &(un.i));printf("%p\n", &(un.c));printf("%p\n", &un);return 0;
}
union Un
{char c;int i;
};
int main()
{//联合变量的定义union Un un = { 0 };un.i = 0x11223344;un.c = 0x55;printf("%0x\n", un.i);return 0;
}

在这里插入图片描述

un的内存布局:
在这里插入图片描述

计算联合体的大小

• 联合的⼤⼩⾄少是最⼤成员的⼤⼩。
• 当最⼤成员⼤⼩不是最⼤对⻬数的整数倍的时候,就要对⻬到最⼤对⻬数的整数倍

#include <stdio.h>
union Un1
{char c[5];int i;
};
union Un2
{short c[7];int i;
};
int main()
{printf("%d\n", sizeof(union Un1));printf("%d\n", sizeof(union Un2));return 0;
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

联合体练习

int check_sys()
{union{int i;char c;}un;un.i = 1;return un.c; //返回1是⼩端,返回0是⼤端
}
int main()
{int ret = check_sys();if (ret == 1){printf("小端\n");}else{printf("大端\n");}return 0;
}

在这里插入图片描述

很巧妙的代码思路

枚举类型的声明

枚举顾名思义就是⼀⼀列举
把可能的取值⼀⼀列举
比如:星期,月份…

enum Day//星期
{
Mon,
Tues,
Wed,
Thur,
Fri,
Sat,
Sun
};

在这里插入图片描述

定义的 enum Day , enum Month 都是枚举类型。
{}中的内容是枚举类型的可能取值,也叫 枚举常量
这些可能取值都是有值的,默认从0开始,依次递增1,当然在声明枚举类型的时候也可以赋初值。

enum Color//三原色
{
RED=2,
GREEN=4,
BLUE=8
};

看到这,有人可能会想到我们之前学习过的 #define宏定义,它与枚举有什么区别或者优劣呢?

枚举的优势

1. 增加代码的可读性和可维护性
2. 和#define定义的标识符⽐较枚举有类型检查,更加严谨。
3. 便于调试,预处理阶段会删除 #define 定义的符号
4. 使⽤⽅便,⼀次可以定义多个常量
5. 枚举常量是遵循作⽤域规则的,枚举声明在函数内,只能在函数内使⽤

我们在以后的

枚举的使用

enum Color//三原色
{
RED,
GREEN=4,
BLUE,
};

在这里插入图片描述
如果使用#define 来定义的话:

#define RED 0
#define GREEN 4
#define BULE 5

使⽤枚举常量给枚举变量赋值

enum Color//颜⾊
{
RED=1,
GREEN=2,
BLUE=4
};
enum Color clr = GREEN; //使⽤枚举常量给枚举变量赋值

5.完结


本次博客到此结束
祝开心每一天~~~
最后觉得博客有帮助,可以点点关注,支持一下,期待下次博客~~~

相关文章:

  • 【Web】记录Polar靶场<简单>难度题一遍过(全)
  • 电脑分辨率怎么调,电脑分辨率怎么调整
  • 【面试题】RocketMQ怎么处理消息积压?
  • JavaScript是如何实现页面渲染的
  • ChatGPT技巧分享:如何用AI提升学术写作水平
  • sftp相关
  • Open CASCADE学习|将双曲线转换为B样条曲线
  • git仓库太大只下载单个文件或文件夹
  • 突破编程_前端_JS编程实例(分割窗体组件)
  • HarmonyOS 应用开发之RelationalStore开发
  • NoSQL之 Redis配置
  • 【洛谷 P8700】[蓝桥杯 2019 国 B] 解谜游戏 题解(字符串+映射+周期性)
  • 在Windows的Docker上部署Mysql服务
  • Python数据结构与算法——数据结构(栈、队列)
  • 新网站秒收录技术,新网站百度收录时间
  • CSS中外联样式表代表的含义
  • ECMAScript 6 学习之路 ( 四 ) String 字符串扩展
  • es6--symbol
  • flutter的key在widget list的作用以及必要性
  • java2019面试题北京
  • JS学习笔记——闭包
  • MySQL Access denied for user 'root'@'localhost' 解决方法
  • Next.js之基础概念(二)
  • python 学习笔记 - Queue Pipes,进程间通讯
  • Rancher如何对接Ceph-RBD块存储
  • SpingCloudBus整合RabbitMQ
  • Spring技术内幕笔记(2):Spring MVC 与 Web
  • Spring框架之我见(三)——IOC、AOP
  • vue和cordova项目整合打包,并实现vue调用android的相机的demo
  • 翻译--Thinking in React
  • 缓存与缓冲
  • 基于web的全景—— Pannellum小试
  • 吴恩达Deep Learning课程练习题参考答案——R语言版
  • 移动互联网+智能运营体系搭建=你家有金矿啊!
  • Semaphore
  • 阿里云API、SDK和CLI应用实践方案
  • 格斗健身潮牌24KiCK获近千万Pre-A轮融资,用户留存高达9个月 ...
  • 回归生活:清理微信公众号
  • ​卜东波研究员:高观点下的少儿计算思维
  • #include
  • #每天一道面试题# 什么是MySQL的回表查询
  • (14)学习笔记:动手深度学习(Pytorch神经网络基础)
  • (17)Hive ——MR任务的map与reduce个数由什么决定?
  • (C#)一个最简单的链表类
  • (附源码)ssm失物招领系统 毕业设计 182317
  • (已更新)关于Visual Studio 2019安装时VS installer无法下载文件,进度条为0,显示网络有问题的解决办法
  • (转)visual stdio 书签功能介绍
  • *Algs4-1.5.25随机网格的倍率测试-(未读懂题)
  • *p=a是把a的值赋给p,p=a是把a的地址赋给p。
  • ..thread“main“ com.fasterxml.jackson.databind.JsonMappingException: Jackson version is too old 2.3.1
  • .NET Framework 服务实现监控可观测性最佳实践
  • .NET 设计模式—适配器模式(Adapter Pattern)
  • .NET/C# 使用 SpanT 为字符串处理提升性能
  • .NET/C# 推荐一个我设计的缓存类型(适合缓存反射等耗性能的操作,附用法)
  • .NET单元测试