5 结构体数组
一个结构体变量中能够存放一组数据(如一个学生的学号,姓名,成绩等数据)。假设有10个学生的数据须要參加运算,显然应该用数组,这就是结构体数组。结构体数组与曾经介绍过的数据值型数组不同之处在于每一个数组元素都一个结构体类型的数据,它们分别包含各个成员(分量)项。
5.1 定义结构体数组
和定义结构体变量的方法相仿,仅仅需说明其为数组就可以。
struct student
{
int num;
char name[20];
char sex;
int age;
float score;
char addr[30];
};
struct student stu[3];
以上定义了一个数组 stu,其元素为 struct student 类型数据,数组有 3 个元素。也能够直接定义一个结构体数组。如:
struct student
{
int num;
....
}stu[3];
或
struct
{
int num;
...
}stu[3];
5.2 结构体数组的初始化
与其他类型数组一样,对结构体数组能够初始化如:
struct student
{
int mum;
char name[20];
char sex;
int age;
float score;
char addr[30];
}stu[3] = {{10101,"Li Lin", 'M', 18, 87.5, "103 Beijing Road"},
{10101,"Li Lin", 'M', 18, 87.5, "103 Beijing Road"},
{10101,"Li Lin", 'M', 18, 87.5, "103 Beijing Road"}};
定义数组 stu 时,元素个数能够不指定,即写成下面形式:
stu[] = {{...},{...},{...}};
编译时,系统会依据给出初值的结构体常量的个数来确定数组元素的个数。
当然,数组的初始化也能够用下面形式:
struct student
{
int num;
...
};
struct student stu[] = {{...},{...},{...}};
即先声明结构体类型,然后定义数组为该结构体类型,在定义数组时初始化。
从以上能够看到,结构体数组初始化的一般形式是在定义数组的后面加上:
5.3 结构体数组应用举例
以下样例说明结构体数组的定义和引用。
#include <stdio.h>
#include <string.h>
#include <stlib.h>
struct person
{
char name[20];
int count;
}leader[3] = {{"Li", 0},
{"Zhang", 0},
{"Fun", 0}};
void 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(" ");
for(i=0;i<3;i++)
printf("%5s: %d ", leader[i].name, leader[i].count);
system("pause");
}
执行结果例如以下:
LI
Li
Fun
Zhang
Zhang
Fun
Li
Fun
Zhang
Li
Li: 3
Zhang: 3
Fun: 3
一个结构体变量中能够存放一组数据(如一个学生的学号,姓名,成绩等数据)。假设有10个学生的数据须要參加运算,显然应该用数组,这就是结构体数组。结构体数组与曾经介绍过的数据值型数组不同之处在于每一个数组元素都一个结构体类型的数据,它们分别包含各个成员(分量)项。
5.1 定义结构体数组
和定义结构体变量的方法相仿,仅仅需说明其为数组就可以。
struct student
{
int num;
char name[20];
char sex;
int age;
float score;
char addr[30];
};
struct student stu[3];
以上定义了一个数组 stu,其元素为 struct student 类型数据,数组有 3 个元素。也能够直接定义一个结构体数组。如:
struct student
{
int num;
....
}stu[3];
或
struct
{
int num;
...
}stu[3];
5.2 结构体数组的初始化
与其他类型数组一样,对结构体数组能够初始化如:
struct student
{
int mum;
char name[20];
char sex;
int age;
float score;
char addr[30];
}stu[3] = {{10101,"Li Lin", 'M', 18, 87.5, "103 Beijing Road"},
{10101,"Li Lin", 'M', 18, 87.5, "103 Beijing Road"},
{10101,"Li Lin", 'M', 18, 87.5, "103 Beijing Road"}};
定义数组 stu 时,元素个数能够不指定,即写成下面形式:
stu[] = {{...},{...},{...}};
编译时,系统会依据给出初值的结构体常量的个数来确定数组元素的个数。
当然,数组的初始化也能够用下面形式:
struct student
{
int num;
...
};
struct student stu[] = {{...},{...},{...}};
即先声明结构体类型,然后定义数组为该结构体类型,在定义数组时初始化。
从以上能够看到,结构体数组初始化的一般形式是在定义数组的后面加上:
5.3 结构体数组应用举例
以下样例说明结构体数组的定义和引用。
#include <stdio.h>
#include <string.h>
#include <stlib.h>
struct person
{
char name[20];
int count;
}leader[3] = {{"Li", 0},
{"Zhang", 0},
{"Fun", 0}};
void 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(" ");
for(i=0;i<3;i++)
printf("%5s: %d ", leader[i].name, leader[i].count);
system("pause");
}
执行结果例如以下:
LI
Li
Fun
Zhang
Zhang
Fun
Li
Fun
Zhang
Li
Li: 3
Zhang: 3
Fun: 3