STM32编程中枚举和结构体的结合~

129 篇文章 32 订阅
45 篇文章 3 订阅

01结构体定义

基本定义:结构体,通俗讲就像是打包封装,把一些有共同特征(比如同属于某一类事物的属性,往往是某种业务相关属性的聚合)的变量封装在内部,通过一定方法访问修改内部变量。

结构体的定义:

第一种:只有结构体定义

基本定义:结构体,通俗讲就像是打包封装,把一些有共同特征(比如同属于某一类事物的属性,往往是某种业务相关属性的聚合)的变量封装在内部,通过一定方法访问修改内部变量。

结构体的定义:

第一种:只有结构体定义      【学习交流,请进:607439754】

第二种:附加该结构体类型的“结构体变量”的初始化的结构体定义,如下代码也就是定义结构体时,直接定义一个变量

其实这就相当于先定义结构体,再用结构体定义一个结构体变量:

 第三种:使用typedef关键字,可以将结构体变量定义时少写一个struct,比较省事。

 使用typedef还可以进一步简化,将结构体名也省略,这也是常用的方式

 STM32的标准外设库有大量这样的应用,如下

关于结构体指针定义问题,有很多的“骚操作”的写法,我一般按照下面定义指针

02 结构体初始化     【学习交流,请进:769843038】

在大部分应用中,一般都是定义结构体后,在代码中进行初始化,如下所示

 当然也有可以定义时就进行数据初始化的

C99C11为结构提供了指定初始化器(designatedinitializer)。其初始化器使用点运算符和成员名。

关于C99和C11的知识可以看我之前的文章《C语言的发展》,在IAR和Keil中记得勾选C99的选项。

例如,只初始化xiaoming结构中的name成员,可以这样做:

 也可以按照任意顺序使用指定初始化器:

 这样的赋值方式,在linux方式中很常见,以platform驱动框架为例:

03 访问结构体成员

结构体成员的访问需要借助结构体成员运算符(.),如下

 使用指针时,使用(->)符号访问结构体成员

04 枚举与结构体的结合

简单介绍下枚举:有些数据的取值往往是有限的,只能是非常少量的整数,并且最好为每个值都取一个名字,以方便在后续代码中使用,比如一个星期只有七天,一年只有十二个月,一个班每周有六门课程等。

当然,你可以用宏定义

 如果用了枚举则如下

 枚举是一种类型,通过它可以定义枚举变量:

那么枚举和结构体一起用会产生什么效果呢?假设我们要协议一个语音芯片的驱动,需要表示语音芯片的状态

 那么改变语音芯片状态时,我们可以按照下面这样写

 判断语音芯片状态时,我们可以按照下面写

 当然,你用宏定义是可以的,代码也很整洁。这里希望你能理解文章最开始的那句话:结构体是某种业务相关属性的聚合。

05 骚操作

关于结构体有很多骚操作,如果全部总结下来,这篇文章就会很臃肿,例如结构体嵌套的骚操作,可以一边定义结构体B,一边就使用上:

 对于这样的情况,我一般主张能看懂就行,自己写代码时就少点这样的骚操作

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值