C语言中struct初始化
在内核中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初始化相关推荐
- c语言中struct和c++中class实例对比
前言 实现游戏中简单的打怪升级的功能 c语言中的struct #include <stdio.h>typedef void(*Train)(struct player*, int); ty ...
- go 语言中 struct 中 json 是代表什么意思
在Go语言中,json 是一个内置的包,用于处理JSON(JavaScript Object Notation)格式的数据.在结构体(struct)中,json 是一个标签(tag),用于为结构体的字 ...
- C语言中struct typedef 以及结构体指针用法
struct .typedef以及结构体指针用法 typedef用法 结构体指针用法 结构体初始化 typedef是类型定义的意思.typedef struct 是为了使用这个结构体方便.具体区别 ...
- C语言中struct, union, enum 三大复合数据类型
2019独角兽企业重金招聘Python工程师标准>>> struct结构体 struct声明一个结构体,它将一些相关联的数据打包成一个整体. 首先看结构体占用内存空间的大小. str ...
- 三步解决C语言中struct字节对齐问题,Python进阶篇-struct字节对齐问题
Python进阶篇-struct字节对齐问题 Python进阶篇-struct字节对齐问题 Python调用C的时候,会传递一些复杂的数据结构,例如结构体,这时候就会遇到各种各样字节对齐的问题.下边所 ...
- c语言中 static int,c语言中static unsigned int n=0;是什么意思?请大师指点迷津,学生有礼了。...
c语言中static unsigned int n=0;是什么意思?请大师指点迷津,学生有礼了.以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我 ...
- 简述C语言中32个关键字
在C语言中,一共有32个关键字,这些关键字我们可以将其非为两类:分别是数据类型关键字和流程控制类关键字.其中数据类关键字又可以分为A基本数据类型(5个).B类型修饰关键字(4个).C复杂类型关键字(5 ...
- Go语言中的struct的初始化。
Go语言中的struct的初始化. GO语言不比其他语言,在struct中,它没有构造函数,不必赋值也能不报错. 比如: type Student struct {name stringage int ...
- 【C语言进阶深度学习记录】十 C语言中:struct的柔性数组和union分析
本文并不讲C语言的基础 文章目录 1 空struct的大小 2 结构体与柔性数组 2.1 柔性数组的使用方法 2.2 柔性数组使用代码案例分析 3 C语言中的union分析 3.1 使用union判断 ...
最新文章
- React+TypeScript练手小项目
- feign date类型时间错误问题
- 如何把两个域控同步_同步带噪音大,怎么办?
- 宝塔php共生,宝塔面板如何开启php扩展
- 【转贴】没有div没有float没有clear没有hack的超强CSS布局
- Hive练习求给出2017年1月的新客数
- java 自动化运维工具_自动化运维工具 - 巴伐利亚的风的个人空间 - OSCHINA - 中文开源技术交流社区...
- 计算机考研专业课——c语言
- 为什么中国程序员工资那么高,连一个 MATLAB 的替代品都开发不出来?
- P1234 小A的口头禅题解
- java对opengl绑定_你好,JOGL - Java与OpenGl的绑定-Java频道-中国IT实验室
- 如何在matlab中表示e,Matlab中表达e的操作方法介绍
- 魔兽世界固态硬盘无法连接服务器,《魔兽世界》9.0配置更改 不再强制要求SSD...
- 从传统企业到字节、美团、京东,再到拿下华为Offer,程序员的逆袭之路。
- 攻防世界——xff_referer
- 【iOS】程序内跳转到支付宝转账(非SDK实现支付)及相关监听
- android q 桌面模式,Android Q带来全新桌面模式
- 2011-09-09 —— A5 —— 虚拟 GPS 串口驱动的添加以及 COM8 冲突问题
- 金仓数据库KingbaseES函数的管理
- 在UI自动化测试中使用flaky插件运行失败用例