结构体的概念
结构体属于C数据类型中的构造数据类型(Composite Data Types),在结构体中可以包含若干个不同数据类型和不同意义的数据项,从而使这些数据项组合起来反映某一个信息,这些数据项称为结构体的成员(member)。
举个例子:
上图是模拟了一个图书管理中的部分数据,可以很清楚的看到一本书有编号、书名、作者等许多信息。如果我想通过一个普通的数据类型来完整的描述这本书肯定是不现实的,而结构体类型是集合了多种不同的数据类型,可以更加完全且方便的描述一本书,此时结构体的每一个成员分别代表着书的不同的信息。
结构体的声明及结构体变量的定义
标准形式:
这里struct为结构体关键字,一般情况下,结构体名、成员列表和结构体变量名列表这三部分至少要出现2个,以示例解释:
1.
2.
3.
4.完全形式
5.也可以通过typedef将结构体重新定义
结构体变量的使用方法
结构体变量在使用的过程中应该注意以下几点:
1. 不能将一个结构体类型变量作为一个整体加以引用,而只能对结构体类型变量中的各个成员分别引用。
2. 使用成员运算符”.”修改和引用成员。
3. 相同结构体类型的变量可以相互赋值。
输出结果:
结构体数组的使用方法
结构体数组的使用方法就是普通类型数组的使用方式与结构体变量的使用方式相结合,没有难度,直接上代码:
输出结果:
结构体指针的使用方法
结构体指针也可以直接引用结构体内的成员,但是格式与变量引用不同,不用”.”而是用”->”引用。
输出结果:
结构体内的偏移规则
1.每个成员的偏移量都必须是当前成员所占内存大小的整数倍如果不是编译器会在成员之间加上填充字节。
2.当所有成员大小计算完毕后,编译器判断当前结构体大小是否是结构体中最宽的成员变量大小的整数倍,如果不是会在最后一个成员后做字节填充。
结构体的大小计算
结构体中有一个long类型,两个char类型,两个int类型成员,一个short类型成员,如果只按照这几个成员大小相加,结构体大小应该是 4*3+1*2+2=16 个字节大小。但实际输出结果是20个字节大小。
下面来一步步分析编译器是如何计算大小进行分配的。
1、遇到第一个成员变量a,该成员偏移量为0,大小为4,符合偏移规则第一条。
2、接下来第二个成员变量b,偏移量为4,大小为1,符合偏移规则第一条。
3、成员变量c,偏移量为5,大小为4,不符合偏移规则第一条。在成员b和c之间填充三个字节,此时,偏移量大小为8,符合偏移规则第一条,继续往下。
4、成员变量d,偏移量为12,大小为4,符合偏移规则第一条,继续往下。
5、成员变量e,偏移量为16,大小为1,符合偏移规则第一条。
6、成员变量f,偏移量为17,大小为2,不符合偏移规则第一条,在成员e和f之间填充1个字节,此时,偏移量大小为18,最终大小20个字节
Copyright © 2004-2024 华清远见教育科技集团 版权所有
京ICP备16055225号-5,京公海网安备11010802025203号