和结构体_结构体初始化的四种方法

本文介绍了C语言中结构体初始化的四种方法:定义时赋值、定义后逐个赋值、定义时乱序赋值(C风格)和定义时乱序赋值(C++风格)。推荐在嵌入式开发中使用第三种方法,而在定义结构体数组时,采用第三种方法结合枚举类型的方式,这种方法在大型项目中常见。

8e48c91326c10d005e5eef216c588aee.gif

从事嵌入式开发后开始使用C来编程。刚开始觉得非常拧巴,经常阅读C代码也就慢慢习惯了。由于没有类的概念,结构体在C中大量使用,今天聊聊结构体变量初始化的四种方法。

C语言中结构体初始化的四种方法

随手写一个结构体:

 typede struct block{char name[32];    int type;    int size;}block;

方法一:定义时赋值

 block test = {"version", 1, 32};需要注意对应的顺序,不能错位。

方法二:定义后逐个赋值

 block test;test.name = "version";test.type = 1;test.size= 3;

此时逐个确定的赋值,无所谓顺序。

方法三:定义时乱序赋值(C风格)

这种方法结合了方法一和二,既能初始化时赋值,也可以不考虑顺序;

 block  test = {    .type= 1,    .size = 12,    .name= "version"};

这种方法在Linux内核中经常使用,嵌入式C代码中基本上都是这种写法。

方法四:定义时乱序赋值(C++风格)这种方法和前一种类似,网上称之为C++风格,类似于key-value键值对的方式,同样不考虑顺序。
 block test = {type:1,size: 9,name:"version"};

如果要声明结构体数组,这里介绍一种表驱动型写法,利用方法3加枚举的形式来定义,个人感觉十分优雅。

 typede struct block{char name[32];    int type;    int size;}block;enum{    ENUM_NAME,    ENUM_TYPE,    ENUM_SIZE,    ENUM_MAX};const block motor[ENUM_MAX] = {    [ENUM_NAME] = {.name = "version", .type = 1, .size = 32},    [ENUM_TYPE] = {.name = "device", .type = 2, .size = 16},    [ENUM_SIZE] = {.name = "firmware", .type = 3, .size = 8},};

总结

  • 嵌入式开发中推荐使用方法3对结构体进行初始化;

  • 结构体数组可采取方法3结合枚举类型,这种在大型项目中较为常见。

62c828af317d973e6572f10fb8b75426.gif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值