C语言学习——结构体

一、结构体

1、结构体作用

对比数组,数组是元素类型一样的数据集合,而很多时候想用很多类型的数据表示一个整体,这个时候就要用到结构体

2、结构体定义

struct 结构体名称
{
    类型1 名称1;
    类型2 名称2;
    ......
};

与下图所示定义结构体后,在main函数中利用“struct 结构体名称 变量名”进行声明,利用“变量名.成员”进行赋值访问,还可以用{ }进行赋值。

在以上的基础上进行一个小练习,只输出成绩高的学生的信息。

3、结构体数组

所谓结构体数组,其实就是将结构体作为作为元素存放到数组中,如下图所示。

【练习】搭建一个选民选票系统,输入三个被选举人的姓名,假设有5个人参与选举,系统要完成被选举人名字的录入票数统计,参与选举人名字录入,且有录入错误提示。

4、结构体指针

通过结构体变量地址来访问该结构体需要一个变量来保持这个地址,这和之前说的指针是一样的,只是指针类型是结构体

第二节中的第一个练习进行应用结构体指针改造。

第二节中的第二个练习进行应用结构体指针改造。

针对于上述程序感觉比较混乱,结合之前学的函数、指针、结构体指针等进行初步综合改进,以及对变量函数名进行更有意义的命名,如下图所示。

5、结构体二级指针

将在第三节改进的程序进行进一步改进,如下图所示,利用二级指针进行操作,接下来将下面红色矩形框中的程序封装成函数。

二、联合体

1、联合体引入

联合体,又叫共用体,同一个空间存放类型不同,不同类型的变量共享一块空间。不同于结构体,结构体元素有各自单独的空间,而共用体元素共享空间,空间大小由最大类型确定,这就导致结构体元素互不影响,而共用体值会导致覆盖。

通过上图中联合体TestU1和TestU2可以观察到联合体的空间是由最大类型决定的,而且对于联合体来说,每个元素的地址都是一致的,这就会出现值覆盖的问题,如下图所示。

在程序中观察到对于结构体u2先赋值int_data赋值,再给double_data赋值,输出int_data的值发现其值被double_data覆盖,继续进行测试,对char_data进行赋值,根据规律,应该输出其对应的ASCII值。

2、联合体开发

【练习】有若干个人员的数据,其中有学生和教师,学生的数据包括:姓名、号码、性别、职业、班级,教师的数据包括:姓名、号码、性别、职业、职务,要求用同一个表格来处理。

三、枚举类型

如果一个变量只有几种可能,比如星期几等,此时适合用枚举类型,列表中的名字,可以自己定义,无需像变量一样去申请。C编译器把它当成常量处理,也称枚举常量。

在上图中,对于我的个人理解来说,枚举其实是用字符串来代表整型数据,Sun就代表0,Mon代表1,Tue代表2,...,可以进行数值比较等,如下图所示,0<1,通过判断输出。

还有就是可以对其中的字符串进行赋一个整型的值,其后的字符串所表示的整型值会依次递增,如下图所示。

四、typedef关键字

typedef关键字作用是给已经有的变量类型起名字,一般配合结构体使用,这样做是为了每次不必以struct开头,如下图所示,将结构体struct Test重命名为T,在主函数中直接使用T进行声明。

将上述过程进行简化,可得到下图所示的代码。

下面进行一个typedef与结构体的小应用,如下图所示。

下图改为应用结构体指针

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值