读书人

求struct union的大小解决办法

发布时间: 2013-12-13 13:57:17 作者: rapoo

求struct union的大小


typedef union
{
long i;
int k[5];
char c;
}DATE;

struct data
{
int cat;
DATE cow;
double dog;
}too;

求sizeof(struct data)+sizeof(max))是多少,为什么
struct data里面是怎么对齐的。。。
结构体
[解决办法]
引用:
Quote: 引用:

Quote: 引用:

Quote: 引用:

Quote: 引用:

w网上很多这样的内存对齐的介绍的!看看理论知识!自己再敲下代码就明白了!


我敲了代码,运行结果是52,但是不懂,union的话大小是20这个明白,但后面一个怎么算都不是编译器的运行结果啊,可以指点下吗?

sizeof(struct data)+sizeof(max) max是什么呢?

看到了 后面就是 4+ 20 +8 =32

亲,为什么不用补齐呢?结构体的大小不得是最宽基本类型的整数倍么?而且偏移量也得是成员大小的整数倍啊,都不满足呢?

32位都是4字节补齐就好了阿!你这里都是4字节对齐的啊!
[解决办法]
其实应该换一个角度来想,按哪种方式对齐,需要把所有成员数据都拆成内置类型,然后再看整数倍(不包括数组)。所以DATE其实可以认为是int k[5];组成的,撇开数组后类型是int,所有的成员都没有超过4字节,所以是按4字节对齐的。

读书人网 >C语言

热点推荐