STRUCT的内存

本文探讨了C语言中结构体内存的分配规则,即先定义的成员位于低地址,后定义的位于高地址,并遵循内存对齐策略。在C++中,结构体的首元素地址通常会与结构体地址不一致,因为会预留4字节以区别对象地址。作者在实验过程中遇到疑惑,发现使用结构体名后,后续输出出现异常,希望能得到解答。

在C语言中,结构体的内存是由先到后顺序占用空间的。

先定义的在低地址,后定义的在高地址。地址采用空间对其策略。

其实这是一篇问题贴,一直没有弄懂是什么问题!!!

在结构体内存中

结构体首元素地址和结构体首地址一致。(C++不一致),c++中,一般会空出开始的4字节,为了区别对象地址,和第一个成员的地址。通常是1字节,但是字节对齐的时候,就占用了4字节。
实际上,你看到sizeof(空结构体) =4.

但是,首地址会影响后面的地址。

typedef struct
{
  
  
  int a;
  char b;
  char c[12];
}stu;


stu s={7,'c',"qqq"};

printf("%d\n",sizeof(stu));

printf("%p\n",&(s.a));
printf("%p %p %p %p\n",s,  &s,     &(s.a), &(s.c));
printf("%p %p %p %p\n",&s, &(s.a), &(s.b), &(s.c));
printf("%p %p %p %p\n",s,  &(s.a), &(s.b), s.c);

printf("%p %p %p %p\n",s,s,s,s);

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值