一:结构体定义
1.C语言允许用户自己建立由不同类型的数据组成的组合型数据结构,它称为结构体
2.一般形式:
struct 结构体名
{成员列表};
(1)struct是声明结构体类型时所必须使用的关键字
(2)大括号内是结构体所包含的子项,称为结构体成员,对各成员都应进行类型声明,即类型名 成员名;
3.先声明结构体类型,再定义该类型的变量
例:struct student(结构体类型名)student1 student2(结构体变量名)
这种方式是声明类型和定义变量分离,在声明类型后可以随时定义变量,比较灵活
4.在声明类型的同时定义变量,一般形式:
struct 结构体名
{
成员表列
}变量名表列;
二:引用结构体变量
1.可以引用结构体变量中成员的值
例:结构体变量.成员名
在程序中可以对变量的成员赋值
例:student1.num=10010
(1)“.”是成员运算符,它在所有的运算符中优先级最高,因此可以把student1.num作为一个整体来看待
(2)不能通过结构体变量名来得到结构体变量中所有成员的值,只能对结构体变量中的各个成员分别进行输入和输出
2.如果成员本身又属一个结构体类型,则要用若干个成员运算符,一级一级地找到最低一级的成员。只能对最低级的成员进行赋值或存取以及运算
3.对结构体变量的成员可以像普通变量一样进行各种运算
4.可以引用结构体变量成员的地址,也可以引用结构体变量的地址,结构体变量的地址主要用作函数参数,传递结构体变量的地址
三:结构体数组
1.定义结构体数组的一般形式:
(1)struct 结构名
{成员列表}数组名[数组长度];
(2)先声明一个结构体类型,然后再用此类型定义结构体数组
结构体类型 数组名[数组长度];
2.对结构体数组初始化的形式是在定义数组的后面加上“={初值表列};”
四:结构体指针
所谓结构体指针就是指向结构体数据的指针,一个结构体变量的起始地址就是这个结构体变量的指针。如果把一个结构体变量的起始地址存放在一个指针变量中,那么这个指针变量就指向该结构体变量。指针变量既可以指向结构体变量,也可以用来指向结构体数组中的元素。但是指针变量的基类型必须与结构体变量的类型相同
五:线性链表
1.线性链表就是动态地进行储存分配的一种数据结构。动态的数据结构,没有固定的大小,根据需要随时开辟存储单元,在用完后可以随时释放存储单元
2.链表有一个“头指针”变量,它存放一个地址,该地址指向链表中的一个元素。 链表中的元素称为“结点”, 每个结点都应包括两个部分:用户需要用的实际数据和下一个结点的地址。
3.链表中各结点在内存中的地址可以是不连续的。要找某一结点,必须先找到上一个结点,根据它提供的下一结点地址才能找到下一个结点。如果不提供“头指针” ,则整个链表都无法访问。
4.链表这种数据结构,必须利用结构体变量和指针变量才能实现。
六:共用体类型
1.将几种不同类型的变量存放到同一段内存单元中,一般形式:
union 共用体名
{成员表列
}变量表列;
2.结构体变量所占内存长度是各个成员占内存长度之和。每个成员分别占有其自己的内存单元。而共用体变量所占的内存长度等于最长的成员的长度
3.不能引用共用体变量,而只能引用共用体变量中的成员