1、第六章 结构体一、问题的提出经常会碰到一些表格,例如下面的学生成绩管理表格。学号 姓名 性 别 入学 时间计 算机原理 C语 言 编译 原理操作系 统1 张 三 男 2003 95 98 85 782 李四 女 2003 92 90 91 86 利用数组来进行编程,必须按列来存储,即同一类型,而不能按照记录来存储,不符合人们的日常习惯。二、结构体的声明结构体 是一个或多个可以是相同数据类型、也可以是不相同的数据类型的变量集合在一个名称下,便于应用的数据类型。结构体声明的格式如下:struct 结构体名 成员表列;第六章 结构体整体是新的数据类型名关键字构成结构体的成员;声明结束,不能省略例如对
2、于前面的学生成绩管理例子中,可以声明如下结构体:struct ST int StudentID;char StudentName10;char StudentSex4;int TimeOfEnter;int Score_1;int Score_2;int Score_3;int Score_4; 成员由不同数据类型的变量组成,共同组成一条学生记录。第六章 结构体第六章 结构体注意:此时只是声明了一种新的数据类型,这种数据类型就是Struct ST, 此时并不为其分配空间。三、定义结构体变量(1) 先声明结构类型再定义结构体变量struct ST student1, student2; 数据类型
3、 变量名一旦定义了结构体类型的变量 student1,student2, 它们就具有了 struct ST类型结构,系统为每个变量分配相应的内存,内存的大小由声明的结构体决定,即结构体中所有成员占用内存的总和。(2) 在声明结构体类型的同时定义变量struct ST int StudentID;char StudentName10;char StudentSex4;int TimeOfEnter;int Score_1;int Score_2;int Score_3;int Score_4;student1, student2;struct 结构体名成员表列; 变量名表列;第六章 结构体(3)
4、直接定义结构体变量struct int year;int month;int day; birthday;struct 成员表列 变量名表列;第六章 结构体第六章 结构体若表格的形式如下:学号 姓名 性 别 入学 时间 计 算机原理 C语 言 编译 原理 操作系 统年 月 日则 结构体形式如下:struct dateint year;char month10;int day;struct ST int StudentID;char StudentName10;char StudentSex4;struct date TimeOfEnter;int Score_1; int Score_2;in
5、t Score_3; int Score_4;student1, student2;四、定义指向结构体的指针一个结构体变量的指针是该结构体变量所占的内存空间的首地址。定义的方法与定义结构体变量的方法相似,也有三种。例如: struct ST *pt; /*pt 是指向 struct ST 结构体数据类型的指针变量 */struct ST student1;pt=第六章 结构体1张三男pt student1五、结构体变量的引用结构体类型的变量有:普通变量、指针变量和数组。定义了一个结构体变量以后,就可以引用此变量。C语言规定,不能将一个结构体变量作为一个整体进行输入、输出(即不可以: printf(“%d%s%d ”, student); ),而必须对其成员在输出表列中逐一显示列出,然后再逐一输入其值。第六章 结构体第六章 结构体访问结构体成员的方法:( 1)对于定义的结构体类型的普通变量,使用圆点运算符访问。结构体变量名 . 成员名如: student1.name=“张三 ”( 2)对于定义为指向结构体的指针变量,使用箭头运算符访问。指向结构体的指针变量名 - 成员名如: pt-name=“张三 ”( 3)前两者的结合。例如:struct ST *pt, student;pt=(*pt).studentId=12; /*不要写成 (*pt)-studentId=12;*/