
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结合枚举类型,这种在大型项目中较为常见。

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

被折叠的 条评论
为什么被折叠?



