学习C的知识点十一--结构体

1、概念

结构体与数组相对应,数组只能存放相同类型的数据,而结构体可以存放若干个不同类型的数据。结构体就是我们所称的自主义数据类型。

2、定义方法

在主函数外面自定义
声明格式:

struct(关键字)+结构体名(从规范角度来说,结构体名应该大字)
{
    若干个数据(只能申明,不能定义)
}

如何去申明及定义一个结构体变量:

struct +结构体名+变量名={与该结构体成员相符合的具体数据}

3、结构体的内存管理方式:

遵循字节对齐原则

  1. 字节对齐:结构体声明的时候,系统并不会一次性的将整个结构的内存空间申请出来,系统会先找到结构体内内存占据最大的数据类型,然后先开辟该数据类型的大小空间,然后从每一个结构体成员,开始向内存数据,一旦该内存空间无法完整的存放新的成员,则系统会重新开辟一片内存空间,直到所有成员存放完毕。
  2. 有时候,某些结构按照第一种字节对齐原则进行内存空间大小的计算后,发现和系统的sizeof给出的大小不一致,那么表示此时遵循了第二种字节对齐原则。
  3. 计算机无论运行速度多快,它一次性读取的数据总是有限制的,这个限制取决于计算机系统的位数,也就是说,32位系统一次性只能读取32个位的数据,64位系统一次性只能读取64个位的数据。

4、结构体的访问方式:

  • 通过:结构体变量名‘.’成员变量名;这个访问方式即可作为左值,也可作为右值。

  • 由于结构体名不是一个指针,那就意味着,当结构作为实参进行传参的时候,那么当形参改变时对实参是没有影响的。所以对结构体的传参:

    使用返回值的方式,由于结构之间能够相互赋值的关系,所有结构可以作为返回值向外返回,并赋值给自己。
    使用指针的方式,在函数内部直接修改的就是实参地址上的值。注意:结构体指针有特殊的取值方式。无需对结构体指针取‘*’之后,再进行‘.’访问成员,可以直接使用’->’方式进行访问。
    参数传递小结

结构作为函数参数的三种方式

1、 传递结构成员
2、 传递结构

  • 优点:函数处理的是原始数据的副本,保护了原始数据
  • 缺点:老版本不支持,传递结构浪费时间和存储空间
  • 一般用来处理小型结构数据

3、 传递结构的地址

  • 优点:程序的执行速度快,效率高
  • 缺点:无法保护数据,函数中的操作有可能会意外影响原结构中的数据 程序员为了追求效率,常用此方案

5、结构体与数组的区别

  1. 数组只能存放相同类型的数据,而结构体可以存放若干个不同类型的数据
  2. 结构体之间可以相互赋值。
  3. 数组通过下标的方式或者通过指针偏移的方式进行访问,而结构体只能通过成员变量的名字进行单一访问。注意,结构体不存在遍历算法

6、联合体和枚举

  1. 联合体
    联合体的自定义只需要把struct替换成union即可。
    它与结构体的区别在于:
    联合体会找到最大成员,然后只分配一次该成员所占内存空间大小。
  2. 枚举
    枚举是一个保存常量的集合,也可以理解成将很多常量集中起来做统一管理。
    关键字 enum 这些常量从上往下,默认是从0开始,然后递增;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值