1、引言
今天这篇博客是对结构体做一个简单的介绍
2、结构体类型的声明
1、结构是一些值的集合,这些值被称为成员变量,结构的每个成员可以是不同类型的变量,同时我们还学习过数组的概念,数组是一种相同类型元素的集合
2、结构体成员的类型可以是标量,数组,指针,甚至是其他的结构体。
下面是在结构体中套结构体的例子
首先我们需要再创建一个结构体 S
再用该结构体创建一个成员变量ss,放入结构体 Stu 中
初始化结构体Stu的时候需要将结构体S的部分另外用一个大括号括起来
最后输出的结果如下
3、结构体传参
1、重点: 函数传参时,参数是需要压栈的。如果传递一个结构体对象时,结构体过大,参数压栈的系统开销就比较大,会导致性能下降。
2、例子:
在输出结果相同的情况下,print2 函数只传递结构体 struct S s 的地址,能够更好的提升这段代码的性能
4、函数栈帧的创建和销毁(重点)
1、寄存器:有eax、ebx、ecx、edx、(ebp、esp)其中ebp和esp这两个寄存器中存放的是地址,这两个地址是用来维护函数栈帧的。
ebp被称作 栈低指针,esp被称作 栈顶指针
小知识
1、任何一次函数调用都要在内存中开辟空间,内存中存在栈区,堆区,静态区
2、传值调用:当实参传给形参的时候,形参是实参的一份临时拷贝。
3、栈:我们可以把 栈 想象成一个木桶,只能从木桶的顶部将元素放进去,先放进去的元素就沉在底部,后放进去的元素就浮在表面,所以元素从栈顶上插入,删除时也从栈顶先开始。
4、push是压栈,pop是出栈
5、压栈和出栈:我们通常将在栈顶插入元素叫入栈,在栈顶删除元素叫出栈。(函数传参的时候,参数是需要压栈的)
6、栈区的使用都是从高地址向低地址使用
Tips:结构体传参的时候最好传结构体的地址