自定义类型,结构体,枚举, 联合的总结

学习了自定义类型,而以下是我学习了自定义类型后的总结,如有不足望大家指正。

一,什么是结构体

我先介绍结构体。我在介绍结构体之前先铺垫一些知识,我们要了解结构是什么,结构是一些值的集合,这些值称为成员变量。结构体的每个成员可以是不同类型的变量。以下是一个简单的结构体

学过结构体的小伙伴知道以上写的是特殊结构体,它省略了结构体标签tag,这种结构声明称为不完全的声明。以下是结构体声明

知道了结构体声明,接下来是结构体变量的定义,其实很简单,请看

结构体的定义包括定义变量,赋值的操作。细心的同学会发现,第三个结构体不一样,它其实是就结构体自引用,自己调用自己的过程。

二,结构体内存对齐***

计算结构体的大小。

如何计算结构体的大小呢?这牵扯到结构体内存对齐

以下是实现过程

这是一道典型的结构体内存对齐的题。

我首先开辟一处空间

按顺序,先填int 型对齐数,再填short型对齐数,最后补齐

不过我有个疑惑,为什么要内存对齐呢?直接访问内存不好吗?

有两点原因,一,移植原因,不是所有的硬件平台都能访问任意地址上的任意数据的,某些硬件平台只能在某些地址处取某些特定类型的数据,否则抛出硬件异常。

二,性能原因,内存对齐对数据做了对齐,方便对内存进行访问

三,位段

什么是位段

位段与结构类似。有两个不同:位段的成员必须是int,unsianed int 或 signed int。位段的成员后面有一个冒号和一个数字。

特点:位段的成员是:int, unsigned int, signed int或者是char。位段在空间上开辟空间,有四字节,一字节。位段有很多不确定因素,是不跨平台的。

四:枚举

什么是枚举

一一列举,比如一月有三十一天,可以一一列举。

性别,男,女,保密,必然可以一一列举。枚举的例子:

四(2):我们知道#define定义常量,那#define和枚举有啥区别呢?

通过代码运行,不难看出,#define在宏定义时定义的值直接赋值给main函数内部的变量,而宏定义赋值是不可以修改的。枚举中可以任意修改,这样我们在调试时发现问题,是可以修改的。

五,联合体

联合体是成员共用一块内存空间,这样一个联合变量的大小,至少是最大成员的大小

联合体的大小计算。

依据内存对齐规则

这里着重强调,对齐数要对齐到最大数的整数倍,因为内存中要放下最大数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值