结构体初始化的四种方法
结构体初始化的四种方法
从事嵌入式开发后开始使用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结合枚举类型,这种在大型项目中较为常见。
结构体初始化的四种方法相关推荐
- linux c 结构体初始化的四种方法
定义: struct InitMember {int first:double second:char* third:float four; }; 方法一:定义时赋值 struct InitMembe ...
- C语言结构体初始化的四种方法
定义 struct InitMember {int first:double second:char* third:float four; }; 方法一:定义时赋值 struct InitMember ...
- C\C++ 结构体初始化的四种方法
--------------------------------------------- -- 时间:2018-12-26 -- 创建人:Ruo_Xiao -- 邮箱:xclsoftware@163 ...
- C语言结构体初始化的几种方法
一.介绍 结构体作为数据结构的基础,经常使用,其中初始化也有几种方法,这里详细介绍 二.常规初始化(先定义再初始化) typedef struct {int bandrate;int databits ...
- 结构体初始化的几种方法
1.先定义再初始化 struct obj_t {const char *name;int val; };obj_t obj; obj.name = "ABC"; obj.val = ...
- C语言结构体定义的几种方法
什么是结构体? 在C语言中,结构体(struct)指的是一种数据结构,是C语言中聚合数据类型(aggregate data type)的一类.结构体可以被声明为变量.指针或数组等,用以实现较复杂的数据 ...
- C语言常见问题——数组初始化的四种方法
有一回,小易同学对我说:"你学过编程吗",我略略点一点头.他说,"学过编程,我便考一考你,在使用数组之前,应不应该初始化数组?" 我暗想,这么简单的问题,也配考 ...
- 嵌套结构体初始化的几种方式
嵌套结构体初始化的几种方式 #结构体定义 structA define typedef struct {char a;int b;float c; }struct_A_s; structB defin ...
- 结构体初始化的几种方式
结构体初始化的几种方式 无构造方法的结构体初始化 创建一个结构体 struct STUDENT {string name;int age;string sex; } 定义时赋值 // 定义时赋值,通过 ...
- 11【C语言 趣味算法】个人所得税问题(结构体应用):结构体的声明、定义结构体类型的三种方法等
Contents 一.Review 二.New Problem:Personal income tax issues(个人所得税问题) 2.1 Description of the problem 2 ...
最新文章
- 验证URL链接和IP有效性的JS代码(正则表达式)
- 60分钟入门深度学习工具PyTorch
- 算法-----数组------ 数组中的第K个最大元素
- boost::regex模块实现config_info 来打印正则表达式库配置信息的测试程序
- 肝了一个月,终于搞到了 30 页的 Python 进阶面试题
- 制造领域的人工智能技术
- 数列分段`Section II`(洛谷-P1182)
- Civil 3D 二次开发 新建CLR项目出现错误C2143
- Herev Falciani推出新的加密货币和区块链项目
- 家庭收支软件的示例--面向对象版本
- C# 处理应用程序减少内存占用
- Python3 面向对象之:多继承
- 微信小程序:酒桌扑克娱乐喝酒小游戏
- 怎么浏览计算机上的驱动程序,怎么查找和更新驱动程序
- Vivado 查看HLS生成IP的资源和最高频率
- 荣之学教育汇总Shopee平台最全基础知识
- 小米路由器管理员密码爆破!
- Kotlin-协程Coroutines-组合suspending暂停函数
- cannot find -lGL(CentOS8 QT5.12.12)
- 基于 CherryUSB 调试 dwc2 usb host 笔记