当前位置: 首页 > 科技 > 人工智能 > 结构体初始化的四种方法_腾讯新闻

结构体初始化的四种方法_腾讯新闻

天乐
2020-12-08 07:57:09 第一视角

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

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

随手写一个结构体:

typedestructblock

{

charname[32];

inttype;

intsize;

}block;

方法一:定义时赋值

blocktest={"version",1,32};

需要注意对应的顺序,不能错位。

方法二:定义后逐个赋值

blocktest;

test.name="version";

test.type=1;

test.size=3;

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

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

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

block test={

.type=1,

.size=12,

.name="version"

};

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

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

这种方法和前一种类似,网上称之为C++风格,类似于key-value键值对的方式,同样不考虑顺序。

blocktest={

type:1,

size:9,

name:"version"

};

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

typedestructblock

{

charname[32];

inttype;

intsize;

}block;

enum{

ENUM_NAME,

ENUM_TYPE,

ENUM_SIZE,

ENUM_MAX

};

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

提示:支持键盘“← →”键翻页
为你推荐
加载更多
意见反馈
返回顶部