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

结构体

结构体内存对齐规则:

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

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

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

vs 中默认对齐数是8

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

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

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

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

联合体

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

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

枚举:

枚举优点:

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

相关推荐
轻口味16 分钟前
命名空间与模块化概述
开发语言·前端·javascript
晓纪同学1 小时前
QT-简单视觉框架代码
开发语言·qt
威桑1 小时前
Qt SizePolicy详解:minimum 与 minimumExpanding 的区别
开发语言·qt·扩张策略
飞飞-躺着更舒服1 小时前
【QT】实现电子飞行显示器(简易版)
开发语言·qt
明月看潮生1 小时前
青少年编程与数学 02-004 Go语言Web编程 16课题、并发编程
开发语言·青少年编程·并发编程·编程与数学·goweb
明月看潮生1 小时前
青少年编程与数学 02-004 Go语言Web编程 17课题、静态文件
开发语言·青少年编程·编程与数学·goweb
Java Fans1 小时前
C# 中串口读取问题及解决方案
开发语言·c#
盛派网络小助手2 小时前
微信 SDK 更新 Sample,NCF 文档和模板更新,更多更新日志,欢迎解锁
开发语言·人工智能·后端·架构·c#
Chinese Red Guest2 小时前
python
开发语言·python·pygame
一棵星2 小时前
Java模拟Mqtt客户端连接Mqtt Broker
java·开发语言