结构体初始化的四种方法

从事嵌入式开发后开始使用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结合枚举类型,这种在大型项目中较为常见。

结构体初始化的四种方法相关推荐

  1. linux c 结构体初始化的四种方法

    定义: struct InitMember {int first:double second:char* third:float four; }; 方法一:定义时赋值 struct InitMembe ...

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

    定义 struct InitMember {int first:double second:char* third:float four; }; 方法一:定义时赋值 struct InitMember ...

  3. C\C++ 结构体初始化的四种方法

    --------------------------------------------- -- 时间:2018-12-26 -- 创建人:Ruo_Xiao -- 邮箱:xclsoftware@163 ...

  4. C语言结构体初始化的几种方法

    一.介绍 结构体作为数据结构的基础,经常使用,其中初始化也有几种方法,这里详细介绍 二.常规初始化(先定义再初始化) typedef struct {int bandrate;int databits ...

  5. 结构体初始化的几种方法

    1.先定义再初始化 struct obj_t {const char *name;int val; };obj_t obj; obj.name = "ABC"; obj.val = ...

  6. C语言结构体定义的几种方法

    什么是结构体? 在C语言中,结构体(struct)指的是一种数据结构,是C语言中聚合数据类型(aggregate data type)的一类.结构体可以被声明为变量.指针或数组等,用以实现较复杂的数据 ...

  7. C语言常见问题——数组初始化的四种方法

    有一回,小易同学对我说:"你学过编程吗",我略略点一点头.他说,"学过编程,我便考一考你,在使用数组之前,应不应该初始化数组?" 我暗想,这么简单的问题,也配考 ...

  8. 嵌套结构体初始化的几种方式

    嵌套结构体初始化的几种方式 #结构体定义 structA define typedef struct {char a;int b;float c; }struct_A_s; structB defin ...

  9. 结构体初始化的几种方式

    结构体初始化的几种方式 无构造方法的结构体初始化 创建一个结构体 struct STUDENT {string name;int age;string sex; } 定义时赋值 // 定义时赋值,通过 ...

  10. 11【C语言 趣味算法】个人所得税问题(结构体应用):结构体的声明、定义结构体类型的三种方法等

    Contents 一.Review 二.New Problem:Personal income tax issues(个人所得税问题) 2.1 Description of the problem 2 ...

最新文章

  1. 验证URL链接和IP有效性的JS代码(正则表达式)
  2. 60分钟入门深度学习工具PyTorch
  3. 算法-----数组------ 数组中的第K个最大元素
  4. boost::regex模块实现config_info 来打印正则表达式库配置信息的测试程序
  5. 肝了一个月,终于搞到了 30 页的 Python 进阶面试题
  6. 制造领域的人工智能技术
  7. 数列分段`Section II`(洛谷-P1182)
  8. Civil 3D 二次开发 新建CLR项目出现错误C2143
  9. Herev Falciani推出新的加密货币和区块链项目
  10. 家庭收支软件的示例--面向对象版本
  11. C# 处理应用程序减少内存占用
  12. Python3 面向对象之:多继承
  13. 微信小程序:酒桌扑克娱乐喝酒小游戏
  14. 怎么浏览计算机上的驱动程序,怎么查找和更新驱动程序
  15. Vivado 查看HLS生成IP的资源和最高频率
  16. 荣之学教育汇总Shopee平台最全基础知识
  17. 小米路由器管理员密码爆破!
  18. Kotlin-协程Coroutines-组合suspending暂停函数
  19. cannot find -lGL(CentOS8 QT5.12.12)
  20. 基于 CherryUSB 调试 dwc2 usb host 笔记

热门文章

  1. word文档如何插入目录
  2. git文件标识添加绿色和红色图标
  3. 基于VS + Qt编程的UG/NX二次开发
  4. 学校计算机网络教室,关元学校计算机网络教室使用管理制度
  5. 【数据预处理】sklearn实现数据预处理(归一化、标准化)
  6. 吴忌寒联姻500.COM的背后秘密
  7. 运用java画时钟_使用Swing绘制动态时钟
  8. 换个角度看发国难财的行为
  9. 杭州旅游全攻略,详细!
  10. Node.js常用console中的几种方法