定义

struct InitMember
{
    int first;
    double second;
    char* third;
    float four;
};

方法一:定义时赋值

struct InitMember test = {-10,3.141590,"method one",0.25};

需要注意对应的顺序,不能错位。
方法二:定义后逐个赋值

struct InitMember test;

test.first = -10;
test.second = 3.141590;
test.third = "method two";
test.four = 0.25;

因为是逐个确定的赋值,无所谓顺序啦。
方法三:定义时乱序赋值(C风格)

这种方法类似于第一种方法和第二种方法的结合体,既能初始化时赋值,也可以不考虑顺序;

struct InitMember test = {
    .second = 3.141590,
    .third = "method three",
    .first = -10,
    .four = 0.25
};

这种方法在Linux内核(kernel)中经常使用,在音视频编解码库FFmpeg中也大量频繁使用,还是很不错的一种方式。
方法四:定义时乱序赋值(C++风格)

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

struct InitMember test = {
    second:3.141590,
    third:"method three",
    first:-10,
    four:0.25
};

写在后面

其实问题的引出是在分析FFmpeg源代码时,发现大量的结构体乱序赋值初始化的方式,以前在C语言教材上没有发现这种用法,于是学习总结一下,放到这里存档。
————————————————
版权声明:本文为CSDN博主「ericbars」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/ericbar/article/details/79567108

最新文章

  1. 【基于WPF+OneNote+Oracle的中文图片识别系统阶段总结】之篇一:WPF常用知识以及本项目设计总结
  2. 30天的php学习之路——第一天开端
  3. C#温故知新:《C#图解教程》读书笔记系列
  4. jquery mobile 登陆后页面验证
  5. 手把手教你用axis1.4搭建webservice(转)
  6. JaveScript——简介、语法
  7. [Swift]枚举
  8. 读loadBalance技术的一些笔记
  9. OpenGL ES 3.0 基础知识
  10. poj1637 Sightseeing tour 混合图欧拉回路判定
  11. C#继承关系中【方发表】的创建和调用
  12. jquery ajax请求成功,数据返回成功,seccess不执行的问题
  13. Android自定义XML属性
  14. redis集群添加删除节点
  15. jmeter 前置处理器提取用户cookie信息 比如jsessionid
  16. python定时脚本判断服务器内存
  17. Java学习——类与对象
  18. vue cli3.0配制axios代理
  19. LeetCode - 768. Max Chunks To Make Sorted II
  20. client模式下对应接口加入桥接出错

热门文章

  1. minio 集群启动方法
  2. java:svn
  3. Sqlserver实现故障转移 — AlwaysOn实现故障转移(4)
  4. JavaScript Cookie常用设置
  5. 看某视频开始做LINUX笔记的第一天
  6. [转帖]Unix版权史
  7. [转帖]IBM收购红帽价格是多少?是否会形成垄断企业?会存在什么不安因素?
  8. Nginx linux下的安装
  9. Git上传相关资料
  10. 精选 TOP 面试题