[编程笔记]第九章 拓展类型
拓展类型 结构体
结构体
1. 为什么需要结构体?
为了表示一些复杂的事物,而普通的基本类型无法满足实际要求
2. 什么叫结构体?
把一些基本类型数据组合在一起形成的一个新的复合数据类型,叫做结构体
3. 如何定义结构体?
//三种方式,推荐使用第一种
struct Student //第一个方式
{
int age ;
float score ;
char sex ;
}
//第二种方式
struct Student2
{
int age ;
float score ;
char sex ;
} st2 ;
//第三种方式
struct
{
int age ;
float score ;
char sex ;
} st3 ;
怎样使用结构体变量
赋值和初始化
定义的同时可以整体赋值
如果定义完之后,则只能单个的赋初值
如果取出结构体变量中的每一个成员[成员] 【重点】
1. 结构体变量名.成员名
2. 指针变量名 -> 成员名 (第二种方式更常用)
3. 指针变量名 -> 成员名
在计算机内部会被转化成(*指针变量名).成员名的方式来执行
所以说这两种方法是等价的
//例子:
struct Student
{
int age ;
float score ;
char sex ;
} ;
int main()
{
struct Student st = {80,66.6,'F'} ;
//初始化 定义的同时赋初值
struct Student * pst = &st ;
//&st 不能改成st
pst —> age = 88 ; //第二种方式
st.age = 10 ; //第一种方式
return 0;
}
1. pst -> age 在计算机内部会被转化成(*pst).age
没有什么为什么,这就是->的含义,这也是一种硬性规定
2. 所以pst->age 等价于 (*pst).age 也等价于st.age
3. 我们之所以知道pst->age等价于st.age
是因为pst->age是被转化成(*pst).age来执行
4. pst->age 的含义是:
pst所指向的那个结构体变量中的age这个成员
结构体变量和结构体指针变量作为函数参数传递的问题
推荐使用结构体指针变量作为函数参数来传递
结构体变量的运算
结构体变量不能相加 不能相减 也不能相互乘除
但结构体变量可以相互赋值
//例子:
struct Student
{
int age ;
char sex ;
char name ;
} ;//分号不能省
struct Student st1,st2 ;
st1 + st2 st1 * st2 st1/st2 都是错误的
st1 = st2 或者 st2 = st1 都是正确的
//举例
动态构造存放学生信息的结果体数组
动态构造一个数组,存放学生的信息
然后按照分数排序
枚举
什么是枚举
把一个事物所有可能的取值一一列举出来
怎么样使用枚举
枚举的优缺点
代码更安全
书写麻烦
Talk is cheap. Show me the code