C语言中建立数据类型-结构体变量的初始化和引用-学习笔记-46

引入

前面,我们已经学习了三种声明结构体变量的方式,今天我们来学习如何给结构体变量赋初始值输出该结构体成员的值

例子

把一个学生信息放在一个结构体变量中,然后输出这个学生的信息。

1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
int main(){
struct Student{
int num;
char name[20];
char sex;
int age;
char addr[50];
}student_1={001,"Bliner",'M',26,"China,Beijing"};
printf("No.%d\n姓名:%s\n性别:%c\n年龄%d\n家庭住址:%s\n",student_1.num,student_1.name,student_1.sex,student_1.age,student_1.addr);
return 0;
}

输出结果:

No.1
姓名:Bliner
性别:M
年龄26
家庭住址:China,Beijing

程序在一开始,声明了一个 Student 的结构体类型,有 5 个成员。然后再声明类型的同时,定义了一个结构体变量 student_1,它具有 Student 结构体中所规定的结构。
在变量名后面的花括号中,将个成员的值按结构体内顺序分别赋值给 student_1 中的各个成员。

初始化结构体

上面,我们在声明结构体的同时,初始化了变量 student_1 ,初始化列表是用花括号括起来的一些常量,这些常量依次赋值给结构体变量中的各成员。
(这是对结构体变量的初始化,不是结构体类型的初始化)

我们也可以只给结构体中的某一成员初始化:

1
2
struct Student student_1={.name="Bliner"};
//记得 name 前面有个点

上面就是对 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
2
3
student_1.num;  //这个表示student_1结构体变量中的 num 成员
student_1.birthday.month;
//这个表示sutdent_1中有一个成员 birthday 也是一个结构体,month 是 birthday 这个结构体中的一个成员。

如果成员也是结构体,我们必须找到该成员结构体的成员才能操作它。

结构体变量的运算

既然结构体变量中的成员可以单独赋值和使用,那么我们就可以像普通变量一样进行各种运算。

1
2
3
student_2.num=student_1.num; //赋值运算
sum=student_1.age+student_2.age; //加法运算
student_1.score++; //自加运算

同类的结构体变量可以相互赋值

如果两个结构体变量都属于同一结构体,那么两个结构体变量可以相互赋值。

1
student_1=student_2; //因为结构体相同,所以不同逐个成员进行赋值

结构体的地址

可以引用结构体成员的地址,也可以引用结构体的地址

1
2
sancf("%d",&student_1.age); //将输入值赋值给 student_1.age
prfintf("%o",student_1); //将 student_1 结构体的地址输出出来

综合使用

输入两个学生的信息,返回成绩最好的学生的信息。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
int main(){
struct Student{
int num;
char name[20];
int score;
}s1,s2;
printf("请输入学生的个人信息:\n");
scanf("%d %s %d",&s1.num,s1.name,&s1.score);
scanf("%d %s %d",&s2.num,s2.name,&s2.score);
printf("输入的学生是:\n");
printf("%d号,%s,成绩是:%d\n",s1.num,s1.name,s1.score);
printf("%d号,%s,成绩是:%d\n",s2.num,s2.name,s2.score);
printf("成绩最好的是:\n");
if(s1.score>s2.score){
printf("%d号,%s,成绩是:%d\n",s1.num,s1.name,s1.score);
} else{
printf("%d号,%s,成绩是:%d\n",s2.num,s2.name,s2.score);
}
return 0;
}

注意

  1. s1和s2是结构体变量,里面存放学号、姓名和成绩。
  2. 再 scanf 赋值的时候,因为姓名是字符数组了,所以不用加&
  3. 结构体变量中的信息都绑定在一起,所以只比较成绩,就可以很方便的输出该成绩所对应的其它信息了。

尾巴

这是我的个人学习笔记,主要是应付考研复习使用,充斥着一些吐槽和个人观点,并不严谨,欢迎大家参考、指正。


-------------The End-------------
欢迎请我喝咖啡哦~!