C语言联合体和结构体中变量所占内存

2024-12-27 15:18:29
推荐回答(5个)
回答1:

union U两个成员变量,一个字符数组st占4个字节,一个整型i占4个字节,所以两者共用4个字节,union U占4字节。

struct A两个成员变量,一个整型c占4个字节,一个union U类型的u,也占4个字节。所以struct A的大小为两者之和,4+4=8字节。
注,因为这些成员变量都是4字节大小,所以不用考虑字节补齐等因素。

回答2:

共用体:
sizeof(union data1)的值为16.在编译器默认设置的情况下,该共用体最大基本类型为double,它占8字节,所以此共用体以8来对齐。字符数组c2占9个字节,那么整个共用体应该占9个字节,但按照对齐原则,实际分配给它的内存为16字节。

结构体:
struct data以8个字节对齐,long类型的成员1分配8个字节。s、i、c、a原本分别占4、2、1、10个字节。由于考虑到对齐,s分配4个字节,i分配 2个字节,c分配2个字节,此时刚好用完8个字节。a原本分配10个字节,由于考虑到对齐,要使整个结构体所占的存储空间是8的倍数,所以分配给它16个字节。因此结构体data占8+4+4+2+16=32个字节。

回答3:

union的内存大小由其占有内存最大的成员决定,所以union U{char st[4];int i ;};的字节数是4个字节。结构体所占内存由所以成员的字节数相加,所以a的大小为1+4=5.给分吧

回答4:

union U
{char st[4];//4
int i ;};//2
//总共4
struct A
{ int c; //2
union U u ;//4
}a;//总共6

如果有turbo C自己用sizeof看一下也行,如果没有turbo C千万不要用sizeof

回答5:

直接
sizeof a
自己看就好了……