typedef struct_C语言学习第11篇---union enum, sizeof, typedef 分析

本文详细介绍了联合体union的概念及特点,包括内存共享原理及其应用场景,并探讨了union在单片机开发中的内存优化技巧。

00aa3c7cc92cfc19155cb11d4a08579c.png

union相关总结

定义联合体

uniontest

从这可以看出来,联合体内存是共享的,也就是只看那部分占用内存最大则联合体占用就是该内存

相应的缺点就是操作office就会改变teacher的前四个字节的值

根据这个特性,可以有一个妙用!

uniontest

这里联合体有两个成员,一个char ODR,还有一个8位的结构体,因为内存共享,这么着操作后边的结构体就可以改变ODR

例如c.ODR = 0XFF,或者c.bit0 = 1:

这就可以对ODR进行每一位进行赋值了

第二个作用就是节约内存,在内存比较小的单片机内经常使用

在STM8里定义

uint8_t flag1=0;

uint8_t flag2=0;

uint8_t flag3=0;

…………

这么每一个flag会占用一个字节的ram空间

要是使用union会节约空间

union 

这么每个flag占用1bit,8个才占一个字节

union的三种说明方式,基本与结构体一样

1

enum : 枚举

是C语言中的一种自定义类型

值是可以根据需要自己定义的整型值

第一个定义的enum值默认是0

默认情况下的enum值是在前一个定义值得基础上加1

enum类型的变量只能取定义时的离散值

enum中定义的值是C语言中真正意义上的常量

在工程中enum多用于定义整型常量

实验一:enum的使用

#include 

sizeof :

sizeof是编译器的内置指示符

sizeof用于计算类型或变量所占的内存大小

sizeof的值在编译器就已经确定

用于类型: sizeof(type)

用于变量: sizeof(var)或sizeof var

注意:

sizeof 是C语言的内置关键字而不是函数

- 在编译过程中所有的sizeof将被具有的数值所替换

- 程序的执行过程与sizeof没有任何关系

实验2:sizeof的本质

#include 

typedef:面试的时候可能被问到哦

用于给一个已经存在的数据类型重命名

本质上不能产生新的类型

重命名的类型:

- 可以在type语句之后定义

- 不能被unsigned 和 signed 修饰

typedef type new_name

实验3:typedef使用实例

#include 

小结:

enum用于定义离散值类型

enum定义的值是真正意义上的常量

sizeof是编译器的内置指示符

sizeof不参与程序的执行过程

typedef用于给类型重命名

- 重命名的类型可以在typedef语句之后定义


说明

1.该文档仅供个人学习使用,版权所有,禁止商用。

2.本文由我一个人编辑并整理,难免存在一些错误。

3.为了方便大家平时公交、地铁、外出办事也能用手机随时随地查看该教程,该教程同步更新于微信公众号『Allen5G』。

我的微信公众号(ID:Allen5G)主要分享软件工程师进阶(嵌入式,Linux,C/C++,python,英语),程序员职业发展,如果想查看更多内容,可以关注我的微信公众号『Allen5G』

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值