#include<stdio.h>
union F
{
int a;//4
long b;//4
char c;//1
int arr[5];//20
} F1;//20
struct H
{
int a;//4
char b;//1
union F c;//20 4
double d;//8
}H1;//40
//4+1+3+20+4+8
int main()
{
//先问是32位系统还是64位系统
printf("%d %d", sizeof(F1), sizeof(H1));
}
上面结构体的大小为40
#include<stdio.h>
union F
{
int a;//4
long b;//4
char c;//1
int arr[5];//20
} F1;//20
struct J
{
int a;
int arr[4];
};
struct H
{
int a;//4
char b;//1
union F c;//20 4
double d;//8
struct J e;//20
}H1;//64
//4+1+3+20+4+8+20+4
int main()
{
//先问是32位系统还是64位系统
printf("%d", sizeof(H1));
}
答案为64
结构体与联合体镶嵌
类型声明不占用空间,只有定义变量之后才占用空间。切记结构体和联合体结束都要加分号。
答案为20
#include<stdio.h>
struct J
{
int a;
int arr[4];
union F
{
int a;//4
long b;//4
char c;//1
int arr[5];//20
};
}J1;
int main()
{
//先问是32位系统还是64位系统
printf("%d", sizeof(J1));
}
答案为40
#include<stdio.h>
struct J
{
int a;
int arr[4];
union F
{
int a;//4
long b;//4
char c;//1
int arr[5];//20
}HI;
}J1;
int main()
{
//先问是32位系统还是64位系统
printf("%d", sizeof(J1));
}
二.结构体与联合体嵌套的几种情况
1.上面有名字,下面没有名字。这属于类型声明,(联合体)不占用空间。
2.上面没有名字,下面没有名字。这属于定义一个自定义类型变量,占用空间。
如图所示显示冲突:
正确方式:
3. 上面没有名字,下面有名字。相当于这个联合体只使用一次,占用空间。
4.上面下面都有名字。占用空间。
例:
单链表(不推荐):
#include<stdio.h>
struct Node
{
union
{
int data;
int length;
};
struct Node* next;
};
int main()
{
}