结构体数组简单介绍

处理数据时,我们常常会遇到储存多组相关数据的情况,例如我们想要记录一个班学生的学号,成绩等等信息。这时有人会想到多维数组,但是数组储存的每一个元素都需要是同一类型。这时,结构变量能够提高我们表达数据的能力。
它是即能包含字符串又能包含数字,还能保持各信息独立的数据形式。

下面用猫猫举例:

#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);
	
}

结果

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值