一个结构体变量中可以存放一组有关联的数据,(如一个学生的名字,成绩),那如果有10个学生该怎么办呢?显然就要用数组,因为数组是存放同一类型的数据,这里的数组类型为结构体,所以称为结构体数组。
结构体数组和整型数组都差不多,不同的地方就在于每个数组元素都是一个结构体类型的数据,它们都有各自的成员项。
下面用一段代码来说明结构体数组的定义和引用:
#include <stdio.h>
#include <string.h>
#include<stdlib.h>
struct Student{
int score;
char* name;
};
int main()
{
struct Student stu[3]; //定义了一个结构体数组stu,有三个元素
struct Student Max;
struct Student Min;
int i;
int cnt = 0;
float average = 0;
for(i = 0;i < sizeof(stu)/sizeof(stu[0]);i++){
printf("请输入第%d个学生的名字\n",i+1);
stu[i].name = (char*)malloc(128); //注意给name开辟空间
memset(stu[i].name,'\0',128);
scanf("%s",stu[i].name);
printf("请输入第%d个学生的分数\n",i+1);
scanf("%d",&stu[i].score);
if(stu[i].score > 100 || stu[i].score < 0){
printf("请输入0 - 100以内的数\n");
system("pause");
exit(-1);
}
}
for(i = 0;i < sizeof(stu)/sizeof(stu[0]);i++){
printf("第%d个学生名字叫%s\n",i+1,stu[i].name);
printf("第%d个学生的分数为%d\n",i+1,stu[i].score);
}
//让最小值和最大值都等于结构体数组的第一项,因为Max和stu为同一类型,所以可以赋值
Max = stu[0];
Min = stu[0];
for(i = 0;i < sizeof(stu)/sizeof(stu[0]);i++){
if(Max.score < stu[i].score){
Max = stu[i]; //注意交换的是整个人
}
}
for(i = 0;i < sizeof(stu)/sizeof(stu[0]);i++){
if(Min.score > stu[i].score){
Min = stu[i];
}
}
for(i = 0;i < sizeof(stu)/sizeof(stu[0]);i++){
cnt += stu[i].score;
}
average = (float)cnt/i;
printf("考最高分的是%s,分数是%d\n",Max.name,Max.score);
printf("考最低分的是%s,分数是%d\n",Min.name,Min.score);
printf("平均分等于%f\n",average);
system("pause");
return(0);
}
上面代码是一个找最高分,最低分,平均分的一个代码,代码中定义了一个结构体数组struct Student stu[3],输入的名字放入stu[i].name中,分数放入stu[i].score中,其实和整型数组的访问大同小异,都是由三个元素组成(stu[0]、stu[1]、stu[2]),访问也是一样的,但是要注意的是结构体数组中单独的一项表示一个结构体,一项里面都有自己的成员。