c/c++ 结构体、联合体、枚举

结构体

结构体内存对齐规则:

1、结构体的第一个成员对齐到结构体变量起始位置偏移量为0的地址处

2、其他成员变量要对齐到某个数字**(对齐数)的整数倍的地址处。**

对齐数:编译器默认的一个对齐数与该成员变量大小的****较小值。

vs 中默认对齐数是8

Linux中gcc没有对齐数,对齐数就是该成员变量自身大小。

3、该结构体总大小最大对齐数(结构体中每个成员都有一个对齐数,所有对齐数最大的)整数倍。

4、如果嵌套了结构体,嵌套的结构体成员对齐到自己内部成员最大对齐数的整数倍,然后结构体的整体大小就是所有对齐数(含嵌套结构体成员对齐数)的整数倍。

运用offsetof---宏 (需要包含头文件#include<stddef.h>)---->计算结构体成员相较于起始位置的偏移量。

联合体

联合体也是由一个或者多个成员变量来构成,这些成员可以是不同类型,但是编译器只是为最大成员分配足够的空间,联合体的特性就是所有成员共用一块空间,给联合体其中一个成员赋值,其他成员也会相应变动。

可以发现联合体有个特点,就是所有的成员共用一个空间,那么对一个变量进行修改,也会影响另外一个变量。

枚举:

枚举优点:

增加代码的可读性和可维护性,使用起来也较为方便,可以一次性定义多个常量。

相关推荐
阿俊仔(摸鱼版)4 分钟前
Python 常用运维模块之OS模块篇
运维·开发语言·python·云服务器
军训猫猫头5 分钟前
56.命令绑定 C#例子 WPF例子
开发语言·c#·wpf
sunly_12 分钟前
Flutter:自定义Tab切换,订单列表页tab,tab吸顶
开发语言·javascript·flutter
远方 hi22 分钟前
linux虚拟机连接不上Xshell
开发语言·php·apache
涅槃寂雨22 分钟前
C语言小任务——寻找水仙花数
c语言·数据结构·算法
『往事』&白驹过隙;29 分钟前
操作系统(Linux Kernel 0.11&Linux Kernel 0.12)解读整理——内核初始化(main & init)之缓冲区的管理
linux·c语言·数据结构·物联网·操作系统
就爱学编程31 分钟前
从C语言看数据结构和算法:复杂度决定性能
c语言·数据结构·算法
涛ing31 分钟前
23. C语言 文件操作详解
java·linux·c语言·开发语言·c++·vscode·vim
NoneCoder32 分钟前
JavaScript系列(42)--路由系统实现详解
开发语言·javascript·网络
半桔35 分钟前
栈和队列(C语言)
c语言·开发语言·数据结构·c++·git