结构体数组的简单应用
处理数据时,我们常常会遇到储存多组相关数据的情况,例如我们想要记录一个班学生的学号,成绩等等信息。这时有人会想到多维数组,但是数组储存的每一个元素都需要是同一类型。这时,结构变量能够提高我们表达数据的能力。
它是即能包含字符串又能包含数字,还能保持各信息独立的数据形式。
#include <stdio.h>
struct cat {
char name[20];
char colour[10]; /*建立结构声明*/
int age;
};
int main()
{
/*定义结构变量,并初始化*/
struct cat fellow[2] = {
{
"dodo",
"white",
2
},
{
"mimi",
"black",
8
}
};
/*访问结构体数组的成员*/
printf("The first cat's name is %s.\n", fellow[0].name);
printf("The second cat's age is %d yeas old. ", fellow[1].age);
}
1.定义结构声明
struct cat {
char name[20];
char colour[10];
int age;
};
struct 表明其后是一个结构。
“cat” 是跟在struct的一个标记,标记名可以据自己所需。
{} 一对花括号中间就是结构的成员列表。每个成员可以有自己的声明,例如字符串或者整型。
注:花括号之后的 分号; 表示结构布局定义结束,不可缺少。
2.定义结构变量、初始化
struct cat fellow1;//定义单个变量
struct cat fellow[2];//定义数组
在这里 struct cat 的功能就像我们常见的int 或 char 一样。
当然在这里也可以将声明结构的过程和定义结构变量的过程结合为一个步骤。
(声明的右括号后跟变量名)
struct cat {
char name[20];
char colour[10];
int age;
}fellow[2];
初始化结构
struct cat fellow[2] = {
{
"dodo",
"white",
2
},
{
"mimi",
"black",
8
}
};
以花括号{}的形式进行初始化,这里也适当注意 逗号, 的位置,以免弄错。
除了整体初始化,也可以对单独的成员进行初始化
struct cat one={.age=7};
同样可以进行结构嵌套
struct name{
char first[10];/*第一个结构*/
char last[10];
};
struct cat {
struct name handle;
char colour[10]; /*第二个结构*/
int age;
};
struct cat fellow={
{"wa","dodo"}, /*初始化*/
"black",
8
};
3.访问结构成员
这里要用到一个新的运算符——点(.)
即,
访问:在结构名后面加一个点运算符,再在点运算符后面写上成员名。
scanf("%s",&fellow[0].name);
这里 . 比 & 的 运算符优先级高。
最后再来个例子:
输入一个班同学的信息,包括姓名,学号,成绩。最后输出成绩最好的那位同学的信息。
#include <stdio.h>
struct stu {
char name[20];
int num;
int score; /*建立结构声明*/
};
int main()
{
/*定义结构变量*/
struct stu fellow[3];
struct stu maxstu = {.score=0};
for (int i = 0;i < 3;i++) {
scanf("%s %d %d", &fellow[i].name, &fellow[i].num, &fellow[i].score);
if (maxstu.score < fellow[i].score) {
maxstu = fellow[i];
}
}
/*输出成绩最好的那位同学*/
printf("name:%s, num:%d, score:%d", maxstu.name,maxstu.num,maxstu.score);
}