c语言指针存储结构体怎么存储空间,结构体指针怎么存储结构体的数据

本帖最后由 SummerGull 于 2020-7-24 15:01 编辑

这么理解怎么可能对呢。struct的设计思想是 要 “更快 更方便的检索到数据” 所以他放弃了 内存的紧凑性质。

结构体内存对齐。

https://www.cnblogs.com/gaoxiaoniu/p/10675927.html

=============================

还有 你写的这个

0x00000000     张

0x00000001     三

0x00000002     1001

0x00000003     0000

0x00000004     m

0x00000005     25

0x00000006     0000

一个字符占用一个 格子没错。 但是 int是 4个格子的,。

应该是

0x00000000     张

0x00000001     三

0x00000002     1001

0x00000006     m

0x00000007     25

0x00000011     0000

比如 结构体存在 三个数据

struct a

{

short a;

int b;

double c;

};

那么他的sizeof 会是多少呢?

2+4+8=14;

实际大小 我 目测觉得 应该是 2+2+4+4+4 = 16

内存布局是这样的。默认4对齐的话。

a9081cca24a3446725b8a31b4462dcbf.gif

QQ截图20200724144729.png (1.87 KB, 下载次数: 0)

2020-7-24 14:47 上传

这里的 a变量是 short 2字节。 那么 它一定要凑足4个字节之后 才能为 下一个变量 int b 为开头地址。 凑不足 直接空出来。

如果是 字符串的话 1个或2个, 和 a 变量凑满 4个字节即可。

0x00000000     a

0x00000002     'a'

0x00000003     'b'

0~3为四个字节 对齐了。

如果 字符串大于 3个。那么   a变量 2个字节 +3个字节的 字符串。 结果是 超出了 4个字节的宽度。 那么 下一行 就单独 为 字符串末尾开辟一个 空间大小为 4个字节的 地址 专门储存。多了的就空出来(因为 下一个变量 int 是占 4个字节的。 剩余3个字节无法容纳 如果是 short 就可以容纳了。并且是 对齐后储存的。 )

0x00000000     a

0x00000002     'a'

0x00000003     'b'

0~3为四个字节 对齐了。

这里多了个 字符 c 地址为4

0x00000004     'c'

0x00000005        空出来

0x00000006        空出来

0x00000007        空出来

如果 还有一个 short变量 的话 那么 排列是这样的

0x00000004     'c'

0x00000005        空出来

0x00000006        新的short x

0x00000007        新的short x

6~7是 新的short变量  x内存。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值