一个结构体变量中可以存放一组有关联的数据(如一个学生的学号、姓名、成绩等数据),如果有10个学生需要参加运算,显然应该用数组,这就是结构体数组。

9.2.1 定义结构体数组

例9.3 有三个候选人,每个选民只能投票选一人,要求编一个统计选票的程序,先后输入被选人的名字,最后输出各人得票结果。

编写程序:

#include#includestruct Person{char name[20]; //候选人名字int count; //候选人得票数}leader[3]={"Li",0,"zhang",0,"sun",0};int main(){int i,j;char leader_name[20];//定义字符数组for(i=1;i<=10;i++){scanf("%s",leader_name);for(j=0;j<3;j++)if(strcmp(leader_name,leader[j]).name)==0)leader[j].count++;}printf("\nResult:\n");for(i=0;i<3;i++)printf("%5:%d\n",leader[i].name,leader[i].count);return 0;}

(1)定义结构体数组一般形式是

1.struct结构体名

{成员表列} 数组名[数组长度];

2.先声明一个结构体类型,然后再用此类型定义结构体数组:

结构体类型 数组名[数组长度];

struct Person leader[3]; //leader是结构体数组名

(2)对结构体数组初始化的形式是在定义数组的后面加上:

={数组表列};

比如:struct Person leader[3]={“Li”,0,”zhang”,0,”sun”,0};

9.2.2 结构体数组的应用举例

if(stu[j].score>stu[k].score)//进行成绩的比较k=j;temp=stu[k];stu[k]=stu[i];stu[i]=temp; //stu[k]和stu[i]元素互换

9.3 结构体指针

所谓结构体指针就是指向结构体变量的指针,一个结构体变量的起始地址就是这个结构体变量的指针。

9.3.1 指向结构体变量的指针

指向结构体对象的指针变量既可指向结构体变量,也可指向结构体数组中的元素。

例9.5 通过指向结构体变量的指针变量输出结构体变量中成员的信息。

解题思路:

(1)怎样对结构体变量成员赋值

(2)怎样通过结构体变量的指针访问结构体变量中成员

#include#includeint main(){struct Student//声明结构体类型struct Student{long num;char name[20];char sex;float score;};struct Student stu_1;struct Student *p;p=&stu_1; //p指向stu_1stu_1.num=10101;strcpy(stu_1,name,"li min");stu_1.sex='M';stu_1.score=89.5;printf("no.:%ld\nname:%s\nsex:%c\nscore:%5.lf\n",stu_1.num,stu_1.name,stu_1.sex,stu_1.score);return 0;}

9.3.2 指向结构体数组的指针

可以用指针变量指向结构体数组的元素。

例9.6 有3个学生的信息,放在结构体数组中,要求输出全部学生的信息。

解题思路:用指向结构体变量的指针来处理。

(1)声明结构体类型struct Student,并定义结构体数组,同时使之初始化。

(2)定义一个指向struct Student类型数据的指针变量p;

(3)使p指向结构体数组的首元素,输出它指向的元素中的有关信息;

(4)使p指向结构体数组的下一个元素,输出它指向的元素中的有关信息;

(5)再使p指向结构体数组的下一个元素,输出它指向的元素中的有关信息。

编写程序:

#includestruct Student{int num;char name[20];char sex;int age;};struct Student stu[3]={{10101,"li lin",'m',18},{10102,"zhang zhi",'m',19},{10103,"zhang san",'f',20}}//定义结构体数组并初始化int main(){struct Student *p; //定义指向struct Student结构体变量的指针变量printf("no.namesex age\n");for(p=stu;pnum,p->name,p->sex,p->age);return 0;}

9.3.3 用结构体变量和结构体变量的指针作函数参数

将一个结构体变量的值传递给另一个函数,有三个办法:

(1)用结构体变量的成员作参数。例如,用stu[1].num或stu[2].name作函数实参,将实参值传给形参。

(2)用结构体变量作实参。

(3)用指向结构体变量(或数组元素)的指针作实参,将结构体变量(或数组元素)的地址传给形参。