引入
前面,我们学习了如何声明一个结构体类型和初始化结构体变量,那么数组能不能设置为结构体类型呢?答案是肯定的,这就是结构体数组
。结构体数组和普通数组的最大区别就是,每个数组元素其实都是一个结构体类型的数据,因为数组是结构体类型。
例子
三个候选人,10张选票,我们设计一个统计选票的程序,输入10个选票的结果,输出统计数量。
1 |
|
运行结果是:
a
b
a
a
a
c
c
c
b
a
最终结果是:
a 获得 5 票 !
b 获得 2 票 !
c 获得 3 票 !
我们定义了一个结构体数组 leader ,数组包含3个元素,每一个元素都是一个结构体,所以,每一个元素又包含两个结构体成员 name 和 count 。
1 | leader[3]={"a",0,"b",0,"c",0}; |
这里虽然只有三个元素,但每个元素又包含两个结构体,所以我们要这样给数组赋值。
在主函数中,我们要求输入被投票的人名,每次循环获得一个认命,然后再从这个循环中增加一个 3 次的循环,判断输入的这个人名和备选的三个人中的哪个相匹配,匹配的人的 count 自加。
注意
scanf 输入的是一个字符串,赋值给了字符数组,数组名就是这个数组首元素地址
leader[j].name 也是一个字符数组,同样是首元素地址。
所以,指针之间要进行比较,需要用到strcmp 函数
。
定义结构体数组
一般形式
struct 结构体名
{成员列表} 数组名[数组长度]
我们也可以线定一个结构体类型,然后再声明数组。
1 | struct people leader_name[3]; |
我们也可以再定义结构体数组的时候初始化该数组
1 | struct people leader[3]={"a",0,"b",0,"c",0}; |
其实,最重要的就是明白,无论是什么,它还是一个数组,这个数组的每一个元素,都可以理解为一个结构体指针变量,变量中包含结构体的所有成员。
尾巴
这是我的个人学习笔记,主要是应付考研复习使用,充斥着一些吐槽和个人观点,并不严谨,欢迎大家参考、指正。