C语言中结构体问题

发布网友 发布时间:2022-04-24 13:45

我来回答

4个回答

热心网友 时间:2023-10-15 00:04

内存对齐问题,比如这个结构体首地址为0x00000000
(1)
typedef struct{
char c; 0x00000000 1个字节,后面会填充1个字节
short s; 0x00000002 2个字节,后面会填充4个字节
double d; 0x00000008 8个字节
short a; 0x00000010 2个字节,后面会填充2个字节
int i; 0x00000014 4个字节
}Data1;
所以这个结构体的大小为24
(2)
struct Inner
{
double d; 8个字节
short a; 2个字节,后面会填充2个字节
int i; 4个字节
}; 这个为16个字节
typedef struct
{
char c; 1个字节,后面会填充1个字节
short s; 2个字节,后面会填充4个字节
struct Inner inner; 16个字节
}Data3;
所以这个为24个字节

热心网友 时间:2023-10-15 00:04

内存对齐,像:char,short这样不足4个字节的,也默认分配它4个字节的内存空间.追问我知道这些。那不是有我分析的吗。你看看哪儿错了。结果是24,我算的是20

追答cXXX
ssXX
dddd
dddd
aaXX
iiii
你应该这样写才对.

热心网友 时间:2023-10-15 00:05

结构体采用高位先存的存储形式。最大的为double 则以8为基准,要注意遇到int类型是必须以整的形式存储。

热心网友 时间:2023-10-15 00:05

第一个可能是这样的cXssxxxxddddddddaaXXiiii追问不是超过4就按4的倍数计算吗。

追答对齐的几点:
1.数据类型自身的对齐值: 对于char型数据,其自身对齐值为1,对于short型为2,对于int,float,double类型,其自身对齐值为4,单位字节。
2.结构体或者类的自身对齐值:其成员中自身对齐值最大的那个值。
3.指定对齐值:#pragma pack (value)时的指定对齐值value。
4.数据成员、结构体和类的有效对齐值:自身对齐值和指定对齐值中小的那个值。

你(1)情况就是符合第二条:最大的是4
结果应该是这样的:cXXXssXXddddddddaaXXiiii

(2)情况符合第4条,对齐值是2

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com