数组为相同类型的变量描述与使用带来了方便如果数组元素是一个.pptx
数组为相同类型的变量描述与使用带来了方便,如果数组元素是一个结构体变量,那么此数组被称为结构体变量,本节将介绍结构体变量及其应用。在使用过程中,对于相同类型的变量可以用数组进行描述,例如描述多个学生信息的变量,可以用数组进行描述。如果学生数组的每个元素是一个结构体变量,则该数组就可以表示多个学生的信息。这样的数组叫结构体数组。7.3结构体数组
7.3.1结构体数组的定义与初始化1、结构体数组的定义结构体数组的定义只是结构体变量定义的特殊情况,因此定义的方法与结构体变量定义相同,有如下三种定义方法。(1)第一种形式,先定义结构体类型,然后再定义结构体类型的数组。例如:structstu_record //定义一个结构体类型{intnum;charname[10];……};structstu_recordstu[10]; //定义一个结构体数组,含10个structstudent类型的元素
(2)第二种定义方法,在定义类型的同时定义一个结构体类型的数组。例如:structstu_record{intnum;charname[20];……}stu[10]; //定义类型的同时定义一个数组(3)第三种形式,直接定义一个结构体类型的数组。例如:struct{intnum;charname[20];……}stu[10]; //直接定义一个结构体类型的数组
2、结构体数组的初始化结构体类型数组的初始化遵循基本数据类型数组的初始化规律,在定义数组的同时,对其中的每一个元素进行初始化。例如:structstud{ intnum;charname[10];intage;floatscore;}stu[2]={{10,“Zhangsan”,19,98.5},{13,“Ligao”,18,96.5,}};
如果在定义数组的同时进行初始化,可以省略数组的长度,系统会根据初始化数据的多少来确定数组的长度。例如:structtask_finished{chartask[20];chartag;}task_F_or_T[]={{“exer1”,“F”},{“exer2”,“T”},{“exer3”,“F”}};结构体数组task_F_or_T的长度,系统自动确认为3。
注意:初始化是在定义的时候完成的,非定义时只有重新赋值,不能初始化!例如:structstudent{intnum;intage;floatscore};structstudentboy[2];boy[0]={102,19,96.5};boy[1]={103,18,95.5};……这时程序编译时会出错,原因是:结构体数组boy[2]的定义在语句structstudentboy[2]时已完成,因此boy[0]={102,19,96.5}和语句boy[1]={103,18,95.5}就不能看成是初始化,它是重新赋值,C语法是禁止结构体这样赋值的!这时程序编译时会出错,原因是:结构体数组boy[2]的定义在语句structstudentboy[2]时已完成,因此boy[0]={102,19,96.5}和语句boy[1]={103,18,95.5}就不能看成是初始化,它是重新赋值,C语法是禁止结构体这样赋值的!
7.3.2结构体变量的使用(1)结构体变量的成员使用方式结构体变量名.成员名如:stu[i].nmu、stu[i].name、stu[i].agestu1.nmu、stu1.name、stu1.agestu2.nmu、stu2.name、stu2.age结构体变量的成员按照它的简单变量类型的使用方法直接使用。【例7-5】用键盘输入的方法给学生结构体变量赋值,并打印学生信息.typedefstructstudent//定义结构体类型{charnum[10];charname[20];intage;}stud;
voidmain(){inti=0;studstu[2];//定义结构体变量数组printf(学号姓名年龄\n);for(i=0;i2;i++)scanf(%s%s%d,