引入
前面,我们已经学习了三种声明结构体变量的方式,今天我们来学习如何给结构体变量赋初始值
和输出该结构体成员的值
。
例子
把一个学生信息放在一个结构体变量中,然后输出这个学生的信息。
1 |
|
输出结果:
No.1
姓名:Bliner
性别:M
年龄26
家庭住址:China,Beijing
程序在一开始,声明了一个 Student 的结构体类型,有 5 个成员。然后再声明类型的同时,定义了一个结构体变量 student_1,它具有 Student 结构体中所规定的结构。
在变量名后面的花括号中,将个成员的值按结构体内顺序分别赋值
给 student_1 中的各个成员。
初始化结构体
上面,我们在声明结构体的同时,初始化了变量 student_1 ,初始化列表是用花括号括起来的一些常量,这些常量依次赋值给结构体变量中的各成员。
(这是对结构体变量的初始化,不是结构体类型的初始化)
我们也可以只给结构体中的某一成员初始化:
1 | struct Student student_1={.name="Bliner"}; |
上面就是对 student_1 这个结构体变量中的 name 成员进行初始化,切记成员名称前有一个点
。
.name
代表结构体变量中成员 student_1.name,其它没有指定
初始化的数值成员会被系统初始化为0
。
(指针为 NULL,字符为”\0”)
引用结构体变量
引用方式为:
结构体变量名 . 成员名
1 | student_1.name; // 代表的就是 sutdent_1 变量中的 name 成员 |
因此,我们可以把 student_1.name 作为一个整体来看:
1 | student_1.name="Bliner"; |
上面的语句是把 Bliner 字符串赋值给 student_1 结构体变量中的 name 成员。
其中 结构体变量名和成员名中间的点是成员运算符
。它在所有运算符中优先级最高。
结构体中的结构体
如果结构体成员本身也是一个结构体,那需要一级一级的找到最低一级的成员。我们只能操作最低一级的成员,没办法直接操作结构体。
1 | student_1.num; //这个表示student_1结构体变量中的 num 成员 |
如果成员也是结构体,我们必须找到该成员结构体的成员才能操作它。
结构体变量的运算
既然结构体变量中的成员可以单独赋值和使用,那么我们就可以像普通变量一样进行各种运算。
1 | student_2.num=student_1.num; //赋值运算 |
同类的结构体变量可以相互赋值
如果两个结构体变量都属于同一结构体,那么两个结构体变量可以相互赋值。
1 | student_1=student_2; //因为结构体相同,所以不同逐个成员进行赋值 |
结构体的地址
可以引用结构体成员的地址,也可以引用结构体的地址
1 | sancf("%d",&student_1.age); //将输入值赋值给 student_1.age |
综合使用
输入两个学生的信息,返回成绩最好的学生的信息。
1 |
|
注意
- s1和s2是结构体变量,里面存放学号、姓名和成绩。
- 再 scanf 赋值的时候,因为姓名是字符数组了,所以不用加&
- 结构体变量中的信息都绑定在一起,所以只比较成绩,就可以很方便的输出该成绩所对应的其它信息了。
尾巴
这是我的个人学习笔记,主要是应付考研复习使用,充斥着一些吐槽和个人观点,并不严谨,欢迎大家参考、指正。