在内核中fs/ext3/indoe.c中,一个struct初始化格式个这样的:

static const struct address_space_operations ext3_writeback_aops = {.readpage               = ext3_readpage,.readpages              = ext3_readpages,.writepage              = ext3_writeback_writepage,.write_begin            = ext3_write_begin,.write_end              = ext3_writeback_write_end,.bmap                   = ext3_bmap,.invalidatepage         = ext3_invalidatepage,.releasepage            = ext3_releasepage,.direct_IO              = ext3_direct_IO,.migratepage            = buffer_migrate_page,.is_partially_uptodate  = block_is_partially_uptodate,.error_remove_page      = generic_error_remove_page,
};

原来这是属于C99的的特性。

初始化

对于最初(C89)一般形式的struct初始化,需要在大括号中按照成员顺序初始化,和初始化数组很类似;而C99支持乱序初始化,只要给出初始化的变量名,并且在前面加点,后边加等号即可。下面举例和c语言中一般形式的初始化结构体对比:

/* 结构体定义 */
struct People {char * name;int age;int sex;
};/* 形式1(C89,需要成员顺序初始化) */
struct People zjc= {"jayceezhang", 22, 1};/* 形式2(C99) */
struct People zjc2= {.age = 22, .name = "jayceezhang",.sex = 1
};

赋值

对于赋值,C99支持的方式更多样灵活,举例:

/* 形式1(C89): 很好理解,就是分别赋值 */
zjc.name = "zhangjc";
zjc.age = 22;/** 形式2(C99): 可以理解为创建了一个临时struct People变量赋给了zjc,和初始化一* 个道理一样,可以顺序或者点名赋值,但是注意如果没被赋值变量会被覆盖成不明确的值,* 而不会保留原有的值,具体覆盖成什么值应该取决于编译器实现(比如gcc可能是0),所* 以个人感觉方式的赋值个人感觉更像是“重新初始化”而已。*/zjc = (struct People){"zhangjc", 22, 1};
zjc = (struct People){.age = 23, .name = "jcccc", .sex = 1};

另外,可以参考StackOverflow:https://stackoverflow.com/questions/330793/how-to-initialize-a-struct-in-accordance-with-c-programming-language-standards

C语言中struct初始化相关推荐

  1. c语言中struct和c++中class实例对比

    前言 实现游戏中简单的打怪升级的功能 c语言中的struct #include <stdio.h>typedef void(*Train)(struct player*, int); ty ...

  2. go 语言中 struct 中 json 是代表什么意思

    在Go语言中,json 是一个内置的包,用于处理JSON(JavaScript Object Notation)格式的数据.在结构体(struct)中,json 是一个标签(tag),用于为结构体的字 ...

  3. C语言中struct typedef 以及结构体指针用法

    struct .typedef以及结构体指针用法 typedef用法 结构体指针用法 结构体初始化   typedef是类型定义的意思.typedef struct 是为了使用这个结构体方便.具体区别 ...

  4. C语言中struct, union, enum 三大复合数据类型

    2019独角兽企业重金招聘Python工程师标准>>> struct结构体 struct声明一个结构体,它将一些相关联的数据打包成一个整体. 首先看结构体占用内存空间的大小. str ...

  5. 三步解决C语言中struct字节对齐问题,Python进阶篇-struct字节对齐问题

    Python进阶篇-struct字节对齐问题 Python进阶篇-struct字节对齐问题 Python调用C的时候,会传递一些复杂的数据结构,例如结构体,这时候就会遇到各种各样字节对齐的问题.下边所 ...

  6. c语言中 static int,c语言中static unsigned int n=0;是什么意思?请大师指点迷津,学生有礼了。...

    c语言中static unsigned int n=0;是什么意思?请大师指点迷津,学生有礼了.以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我 ...

  7. 简述C语言中32个关键字

    在C语言中,一共有32个关键字,这些关键字我们可以将其非为两类:分别是数据类型关键字和流程控制类关键字.其中数据类关键字又可以分为A基本数据类型(5个).B类型修饰关键字(4个).C复杂类型关键字(5 ...

  8. Go语言中的struct的初始化。

    Go语言中的struct的初始化. GO语言不比其他语言,在struct中,它没有构造函数,不必赋值也能不报错. 比如: type Student struct {name stringage int ...

  9. 【C语言进阶深度学习记录】十 C语言中:struct的柔性数组和union分析

    本文并不讲C语言的基础 文章目录 1 空struct的大小 2 结构体与柔性数组 2.1 柔性数组的使用方法 2.2 柔性数组使用代码案例分析 3 C语言中的union分析 3.1 使用union判断 ...

最新文章

  1. React+TypeScript练手小项目
  2. feign date类型时间错误问题
  3. 如何把两个域控同步_同步带噪音大,怎么办?
  4. 宝塔php共生,宝塔面板如何开启php扩展
  5. 【转贴】没有div没有float没有clear没有hack的超强CSS布局
  6. Hive练习求给出2017年1月的新客数
  7. java 自动化运维工具_自动化运维工具 - 巴伐利亚的风的个人空间 - OSCHINA - 中文开源技术交流社区...
  8. 计算机考研专业课——c语言
  9. 为什么中国程序员工资那么高,连一个 MATLAB 的替代品都开发不出来?
  10. P1234 小A的口头禅题解
  11. java对opengl绑定_你好,JOGL - Java与OpenGl的绑定-Java频道-中国IT实验室
  12. 如何在matlab中表示e,Matlab中表达e的操作方法介绍
  13. 魔兽世界固态硬盘无法连接服务器,《魔兽世界》9.0配置更改 不再强制要求SSD...
  14. 从传统企业到字节、美团、京东,再到拿下华为Offer,程序员的逆袭之路。
  15. 攻防世界——xff_referer
  16. 【iOS】程序内跳转到支付宝转账(非SDK实现支付)及相关监听
  17. android q 桌面模式,Android Q带来全新桌面模式
  18. 2011-09-09 —— A5 —— 虚拟 GPS 串口驱动的添加以及 COM8 冲突问题
  19. 金仓数据库KingbaseES函数的管理
  20. 在UI自动化测试中使用flaky插件运行失败用例

热门文章

  1. SpringBoot项目目录POJO包
  2. spotlight重启
  3. 告别预编译,CSS 直接写嵌套的日子就要来临~
  4. php设计模式学习笔记
  5. 《python语言程序设计》第2章第10题方法‘convert‘可能为’static‘ 这是为什么,从方法中生成函数 ??如何解决呢?
  6. 百度是如何判断网页价值的?
  7. 哈工大操作系统实验坏境搭建
  8. 8个方法教你快速消除眼袋
  9. 2022中国眼博会,恭祝全国人民新年快乐、阖家幸福、生意兴隆
  10. 对数的性质和基本运算