1、2023-1-302/602023-1-303/602023-1-304/602023-1-305/602023-1-306/602023-1-307/602023-1-308/602023-1-309/60分配内存不集中,寻址效率不高分配内存不集中,寻址效率不高 对数组赋初值时,易发生错位对数组赋初值时,易发生错位 结构显得零散,不易管理结构显得零散,不易管理2023-1-3010/602023-1-3011/60声明了一个结构体类型声明了一个结构体类型构成结构体的变量构成结构体的变量称为结构体的成员称为结构体的成员(Structure Member)结构体的名字结构体的名字称为结构体标称为
2、结构体标签签(Structure Tag)2023-1-3012/60结构体模板结构体模板(Structure Template)Dont forget the semicolon!2023-1-3013/60(1 1)先定义结构体类型,再定义变量名)先定义结构体类型,再定义变量名(2 2)在定义类型的同时定义变量)在定义类型的同时定义变量(3 3)直接定义结构体变量(不指定结构体标签)直接定义结构体变量(不指定结构体标签)2023-1-3014/60关键字关键字typedef为一种为一种已存在的已存在的类型定义一个类型定义一个别名别名,并未定义新类型,并未定义新类型STUDENT与与stru
3、ct student类型是类型是同义词同义词2023-1-3015/60等价于等价于等价于等价于2023-1-3016/60结构体定义结构体定义可以嵌套可以嵌套2023-1-3017/602023-1-3018/60按结构体的成员顺序逐按结构体的成员顺序逐一对相应成员进行赋值一对相应成员进行赋值格式符格式符%02d中中2d前面的前导符前面的前导符0表示输表示输出数据时,若左边有多余位,则补出数据时,若左边有多余位,则补02023-1-3019/60两个地址有何不同?两个地址有何不同?2023-1-3020/60结构体成员的地址与结构体成员的地址与该成员在结构体中所该成员在结构体中所处的位置及其
4、所占内处的位置及其所占内存的字节数相关存的字节数相关结构体变量的地址结构体变量的地址&stu2是该变量所占是该变量所占内存空间的首地址内存空间的首地址2023-1-3021/60struct=?2023-1-3022/60事实上,所有数据类型在内存中都是从事实上,所有数据类型在内存中都是从地址开始存放的地址开始存放的且结构所占的实际空间一般是按照机器字长对齐的且结构所占的实际空间一般是按照机器字长对齐的不同的编译器、平台,对齐方式会有变化不同的编译器、平台,对齐方式会有变化结构体变量的成员的存储结构体变量的成员的存储是与机器相关的是与机器相关的具有特定数据类型的具有特定数据类型的也是与机器相关
5、的也是与机器相关的所以一个结构体在内存中的存储格式也是与机器相关的所以一个结构体在内存中的存储格式也是与机器相关的2023-1-3023/602023-1-3024/60建立了数据库中的多条记录,每条对应一个学生信息建立了数据库中的多条记录,每条对应一个学生信息2023-1-3025/602023-1-3026/60ptstu1成员成员1成员成员2成员成员3成员成员4成成员员5等价于等价于2023-1-3027/60ptstu1成员成员1成员成员2成员成员3成员成员4成成员员52023-1-3028/60ptstu1成员成员1成员成员2成员成员3成员成员4成成员员52023-1-3029/60
6、等价于等价于等价于等价于ptstu30stu0stu1stu2stu3stu4stu5.stu292023-1-3030/60ptstu30stu0stu1stu2stu3stu4stu5.stu292023-1-3031/602023-1-3032/60struct date int year;int month;int day;void func(struct date p)p.year=2000;p.month=5;p.day=22;2023-1-3033/60struct date int year;int month;int day;void func(struct date)yea
7、r=2000;month=5;day=22;指针作函数形参指针作函数形参实参必须为地址值实参必须为地址值2023-1-3034/60struct date int year;int month;int day;func(struct date)year=2000;month=5;day=22;2023-1-3035/602023-1-3036/60 2023-1-3037/60 2023-1-3038/60 2023-1-3039/60 2023-1-3040/602023-1-3041/600 x0037b002023-1-3042/60sizeof(union number)取决于取决于的
8、那个成员的那个成员变量变量0 x0037b00同一内存单元在每一瞬时只能存放其中一种类型的成员同一内存单元在每一瞬时只能存放其中一种类型的成员起作用的成员是起作用的成员是的成员,不能作为函数参数的成员,不能作为函数参数不能进行比较操作,只能对第一个成员初始化不能进行比较操作,只能对第一个成员初始化2023-1-3043/602023-1-3044/602023-1-3045/60描述的是一组整型值的集合描述的是一组整型值的集合用于当某些量仅由有限个数据值组成时用于当某些量仅由有限个数据值组成时 enum weeks SUN,MON,TUE,WED,THU,FRI,SAT;enum weeks
9、today;enum response no,yes,none;enum response answer;today =TUE;answer=yes;enum response no=-1,yes=1,none=0;其值为其值为2 2其值为其值为1 12023-1-3046/60结构体声明时不能结构体声明时不能包含本结构体类型包含本结构体类型成员,成员,系统将无法系统将无法为这样的结构体类为这样的结构体类型分配内存型分配内存 可包含指向本结构体可包含指向本结构体类型的指针变量类型的指针变量2023-1-3047/60datanextheaddatanextdatanextdataNULL202
10、3-1-3048/60datanextheaddatanextdatanextdataNULL两部分信息组两部分信息组成一个节点成一个节点2023-1-3049/60datanextheaddatanextdatanextdataNULL数据域:存储数据数据域:存储数据元素信息元素信息指针域:存储直接指针域:存储直接后继的节点信息后继的节点信息n个节点链接成一个链表(因为只包含一个指针域,故又个节点链接成一个链表(因为只包含一个指针域,故又称线性链表或单向链表)称线性链表或单向链表)2023-1-3050/60data=Anodedata=Bnodedata=Cnodehead2023-1-3
11、051/60LL)headdatanext p(2)pr=ppr(3)pr-next=NULL2023-1-3052/60datanextp(2)pr=pheaddataprpr(3)pr-next=NULLnext2023-1-3053/60 datanextheaddatanext p2023-1-3054/60datanextdatanextdatanext pdatanext 2023-1-3055/60 headdata p2023-1-3056/60headdatanext pdatanextdatanextdata2023-1-3057/60datanextdatanext pdatanextdatanextdatapr2023-1-3058/60datanextdatanext pprdatanext2023-1-3059/60headdatanextdatanextdatapppp2023-1-3060/60Questions and answers