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

结构体

结构体内存对齐规则:

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

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

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

vs 中默认对齐数是8

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

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

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

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

联合体

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

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

枚举:

枚举优点:

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

相关推荐
DKunYu7 分钟前
1.多线程初阶
java·开发语言
小欣加油7 分钟前
leetcode 474 一和零
c++·算法·leetcode·职场和发展·动态规划
ccut 第一混9 分钟前
用c# 制作一个扑克牌小游戏
开发语言·c#
LexieLexie11 分钟前
从“Hello, World!”说起:理解程序的基本结构
c++
听风吟丶14 分钟前
Java 9 + 模块化系统实战:从 Jar 地狱到模块解耦的架构升级
开发语言·python·pycharm
做怪小疯子41 分钟前
JavaScript 中Array 整理
开发语言·前端·javascript
旭编42 分钟前
牛客周赛 Round 117
java·开发语言
旭意43 分钟前
数据结构顺序表
数据结构·c++·蓝桥杯
六元七角八分1 小时前
CSDN文章如何转出为PDF文件保存
开发语言·javascript·pdf
froginwe111 小时前
MongoDB 删除数据库
开发语言