一 结构体涉及的内容
二 结构体声明
① 基础知识
引出原因:'复杂对象',没办法直接的'描述',引出'struct(结构体)'
1. 结构是一些'值的集合',这些值称为'成员变量';结构的每个成员可以是'不同类型'的变量
备注: 数组是'相同'类型值的'集合'
② 结构的声明
struct tag {
member-list;
}variable-list;
// 结构体声明本身就是'一条'语句,需要";"分号结束
// variable-list-->逗号分割的'全局'结构体'变量'列表
③ 需求
需求: 描述一个'学生'的相关信息
名字、年龄、电话、性别
// struct 结构体'关键字'
// Student 结构体'标签'
// struct Student '结构体类型' --> '重要!!!'
④ 方式一
⑤ 方式二
⑥ 结构体成员的类型
结构的'成员'可以是标量、数组、'指针',甚至是'其他结构体'
三 结构体的定义和初始化
① 初始化
'定义'变量的同时'赋初值'
备注: 在'不同位置','不同形式',两种'方式'初始化
② 结构体嵌套初始化
结构体的'成员'包含'其它结构体'
四 结构体成员访问
① 结构体变量的方式
结构体变量访问成员:结构变量的'成员'是通过'点操作符(.)'访问的
备注: 点操作符'接受'两个操作数
② 结构体指针的方式
结构体指针'访问'指向变量的成员,有时候我们得到的'不是'一个结构体变量,而是'指向'一个'结构体的指针'
五 结构体函数传参
① 理解
函数'传参'的时候,参数是需要'压栈'的
② 结构体传参
1)传结构体变量 VS 传结构体指针
2)对比
问题:上面的 Print1 和 Print2 函数'哪个好些'?
答案:首选'Print2'函数
原因:函数'传参'的时候,参数是需要'压栈'的;如果传递一个'结构体对象'的时候,结构体过大,'参数压栈'的的'系统开销'比较大,所以会导致'性能的下降'.
结论:结构体'传参'的时候,要传'结构体的地址'
++++++++++++++++++'具体分析'++++++++++++++++++
1. Print1 '形参'是'实参'的临时'拷贝';如果结构体对象比较大,时间('拷贝时间长')、空间('栈占用内存大')
2. Print2 传一个'指针',无法是'4/8'个字节
3)数据结构