今天我们来看看结构体和联合体的存储,新的一天,卯足精神,冲冲冲!!!
目录
结构体的存储
我们已经了解了整型类型,浮点数,字符数的存储,我们来了解一下结构体的存储,要知道结构体的存储和它们的存储方式截然不同,而结构体是什么呢?简单来说是一个能一下定义多个数据类型的结构,简单来说,当我们想一下定义多个变量时,结构体就当仁不让了,比如我们要记录一个学生的基本信息(学号,姓名,性别,成绩等等),我们就能使用它,我们一起来看看:
而另一个问题出来了,我们知道整型类型为4个字节,这里的字符数组占10个字节,这里的整型数组为12个字节,那就有很多同学就认定有16个字节(4+10+12),那它这个结构体是不是就时有16个字节呢?我们看看:
很显然,并不是16个字节,而是28个字节,那它到底是怎么存储的呢?首先我们要引入偏移量,对齐数,默认对齐数的概念。
偏移量,对齐数,默认对齐数
我们先来来了解对齐数,默认对齐数的概念。默认对齐数根据编译器不同,默认对齐数也就不同(根据编译器不同而不同),(Linux中gcc没有默认对齐数,对齐数就是成员本身大小)以vs2022为例,默认对齐数是8个字节,从上到下它们各自的字节大小分别为4,1,4,而它们各自字节大小和默认对齐数相比,哪个小,就取哪个作为它们各自的