首页 > 编程笔记 > C语言笔记 > C语言结构体和位操作
C语言结构的初始化
当定义一个结构对象时,如果想显式地初始化它,必须使用初始化列表:该列表放在一组大括号内,以逗号分隔各初始化器(initializer)或者个别结构成员的初始值。
初始化器和成员声明时的顺序有关:第一个初始化器被关联到第一个成员,第二个初始化器被关联到第二个成员,依此类推。当然,每个初始化器必须具有匹配对应成员的类型(或者,能隐式地转换为成员类型)。如下所示:
在该列表中,每个成员都有一个初始化器。因为成员 published 也是结构类型,所以其初始化器是另一个初始化列表。
可以使指定的初始化器个数少于结构的成员个数。在这种情况下,最后没有对应到初始化器的成员会被初始化为 0。
在上述定义之后,除第一个成员以外,yoursong 的所有其他成员都是 0。成员中的 char 数组被赋值为空字符串,而成员 published 则包含无效的日期{0,0,0}。
如果结构对象属于自动存储类别,初始化器可以是非常量表达式。也可以用相同结构类型的已有对象来初始化一个新的自动结构:
初始化器和成员声明时的顺序有关:第一个初始化器被关联到第一个成员,第二个初始化器被关联到第二个成员,依此类推。当然,每个初始化器必须具有匹配对应成员的类型(或者,能隐式地转换为成员类型)。如下所示:
Song_t mySong = { "What It Is", "Aubrey Haynie; Mark Knopfler", "Mark Knopfler", 297, { 9, 26, 2000 } };
在该列表中,每个成员都有一个初始化器。因为成员 published 也是结构类型,所以其初始化器是另一个初始化列表。
可以使指定的初始化器个数少于结构的成员个数。在这种情况下,最后没有对应到初始化器的成员会被初始化为 0。
Song_t yourSong = { "El Macho" };
在上述定义之后,除第一个成员以外,yoursong 的所有其他成员都是 0。成员中的 char 数组被赋值为空字符串,而成员 published 则包含无效的日期{0,0,0}。
如果结构对象属于自动存储类别,初始化器可以是非常量表达式。也可以用相同结构类型的已有对象来初始化一个新的自动结构:
Song_t yourSong = mySong; // 两个结构在一个语句块内,为有效的初始化
所有教程
- C语言入门
- C语言编译器
- C语言项目案例
- 数据结构
- C++
- STL
- C++11
- socket
- GCC
- GDB
- Makefile
- OpenCV
- Qt教程
- Unity 3D
- UE4
- 游戏引擎
- Python
- Python并发编程
- TensorFlow
- Django
- NumPy
- Linux
- Shell
- Java教程
- 设计模式
- Java Swing
- Servlet
- JSP教程
- Struts2
- Maven
- Spring
- Spring MVC
- Spring Boot
- Spring Cloud
- Hibernate
- Mybatis
- MySQL教程
- MySQL函数
- NoSQL
- Redis
- MongoDB
- HBase
- Go语言
- C#
- MATLAB
- JavaScript
- Bootstrap
- HTML
- CSS教程
- PHP
- 汇编语言
- TCP/IP
- vi命令
- Android教程
- 区块链
- Docker
- 大数据
- 云计算