结构体的概念
前面的教程中我们讲解了变量和数组(array),变量是单独的一个一个的定义,数组是一组具有相同类型的变量的集合。但在实际的工作和生活中,我们往往还需要一组类型不同的数据,例如超女基本信息,姓名为字符串,身高和年龄为整数,身材和颜值为字符串,因为各种信息的数据类型不同,不能用一个数组来存放。
如果某对象的信息有100个属性,并且每个属性的数据类型不同,就要定义100个变量,对100个变量初始化,把100个变量作为函数的参数传递,太麻烦了。
在C语言中,使用结构体(struct)来存放一组不同类型的数据。结构体的定义形式为:
结构体是一种集合,它里面包含了多个变量或数组,它们的类型可以相同,也可以不同,每个这样的变量或数组都称为结构体的成员(member)。以超女为例:
结构体成员的定义方式与变量和数组的定义方式相同。
注意大括号}后面的分号;不能少,这是一条完整的语句。
结构体是一种程序员自己定义的数据类型,可以包含多个其他类型的数据,可以包含其他结构体,也可以包含指向自己结构体类型的指针,而通常这种指针的应用是为了实现一些更高级的数据结构如链表和树等。
结构体变量
结构体是一种程序员自定义的数据类型,是模板,可以用它来定义变量。例如:
struct st_girl queen, princess, waiting, workers;
定义了四个结构体变量,queen王后、princess王妃,waiting宫女和workers杂役。
占用内存的情况
理论上讲结构体的各个成员在内存中是连续存储的,和数组非常类似,但是,结果体的占用内存的总大小不一定等于全部成员变量占用内存大小的和。在编译器的具体实现中,为了提高内存寻址的效率,各个成员之间可能会存在缝隙。
用sizeof可以得到结构体占用内容在总大小。
sizeof(struct st_girl); 或 sizeof(queen); 都可以。
示例(book90.c)