struct中嵌套union求sizeof大小,该怎么处理
struct中嵌套union求sizeof大小C/C++ codetypedef union {long iint k[50]char c}DATEstruct date {in
struct中嵌套union求sizeof大小
C/C++ codetypedef union { long i; int k[50]; char c;}DATE;struct date { int cat; DATE cow;};struct A{ char c1; int data1;}A; printf("%d\n",sizeof(struct date) + sizeof(max)); printf("%d\n",sizeof(struct date)); printf("%d\n",sizeof(max)); printf("%d\n",sizeof(A));
[解决办法]我觉得应该是认为struct data成员最大长度认为是int的长度,没有把数组看做一个整体。
[解决办法]union 的长度计算是取其成员的最大值
sizeof(DATA) 为 int k[50] 的值 200
sizeof(data) 为 200 + 4(int) = 204
A 的话有两种情况,像这个没有显示标记优化存储,所以会有产生内存按4字节对齐,所以长度为8
如果在 A 的申明中有加优化存储,长度为 5
还有像4楼的兄弟,所谓内存对齐不是按结构体最的最大成员长度来对齐,而是按 4 字节对齐哈
[解决办法]lz所谓的最长元素,是限定
基本数据类型的,结构体是不算在里面的,如果结构体里有double那是按8对齐,如果结构体里没有4字节以上的基本数据类型那么只会按4对齐
绝对不会出现按200对齐这种事情
如果哪天有16字节的基本数据类型出现按16字节对齐也有可能,目前最长的也就是8字节了
[解决办法]无论是sruct嵌套union还是stuct嵌套struct的对齐都是按基本数据类型算得
[解决办法]union 按大的字节取, int k[50] 最大,所以整个union 50 * 4 200 个字节
struct结构体按4个字节存,超过另外开辟四个四节,
struct A 中 char 虽然一个字节,但是后面int 四个字节,4个字节对齐,所以是 8个字节