【C语言/C++】结构体初阶

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:结构体传参的时候最好传结构体的地址

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值