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

结构体

结构体内存对齐规则:

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

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

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

vs 中默认对齐数是8

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

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

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

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

联合体

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

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

枚举:

枚举优点:

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

相关推荐
D_evil__10 分钟前
[C++高频精进] 并发编程:线程基础
c++
风生u31 分钟前
go进阶语法
开发语言·后端·golang
666HZ66633 分钟前
C语言——黑店
c语言·开发语言
Gomiko40 分钟前
JavaScript基础(八):函数
开发语言·javascript·ecmascript
〝七夜5691 小时前
JVM内存结构
java·开发语言·jvm
初级炼丹师(爱说实话版)1 小时前
JAVA泛型作用域与静态方法泛型使用笔记
java·开发语言·笔记
Mr_WangAndy1 小时前
C++17 新特性_第二章 C++17 语言特性_std::any和string_view
c++·string_view·c++40周年·c++17新特性·c++新特性any
技术净胜1 小时前
MATLAB二维绘图教程:plot()函数全解析(线条样式/颜色/标记/坐标轴设置)
开发语言·matlab
Slow菜鸟2 小时前
Java开发规范(八)| 安全规范—企业级应用的“架构级底线”
java·开发语言·安全
憨憨崽&2 小时前
进击大厂:程序员必须修炼的算法“内功”与思维体系
开发语言·数据结构·算法·链表·贪心算法·线性回归·动态规划