在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);

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

被折叠的 条评论
为什么被折叠?



