【C语言-----(联合)共用体】

1.0 联合类型的定义

联合也是一种特殊的自定义类型。

这种类型定义的变量也包含一系列的成员,特征是这些成员共用同一块空间(所以联合也叫共用体)。

比如:

//联合类型的声明
union U
{
	int a;
	int c;
};
int main()
{
	//联合变量的定义
	union U u;
	//计算联合变量的大小
	printf("%d\n",sizeof(u));

    //查看联合类型成员是否在同一块空间上
    printf("%p\n",u);
    printf("%p\n",&(u.a));
    printf("%p\n",&(u.c));
	return 0;
}

结论:证明了联合的大小和空间共用。

1.1 联合的特点

联合的成员是共用同一块内存空间,这样一个联合变量的大小,至少是最大成员的大小(因为联合体至少要有能力保存最大的那个成员)。

union U
{
	int a;
	int c;
};
int main()
{
	union U u;
	u.a = 0x11223344;
	u.c = 0x00;
	printf("%d\n", u.a);
	printf("%d\n", u.c);
	return 0;
}

面试题:判断当前电脑是大端存储还是小端存储?

int main()
{
	int i = 1;
    //0x 00 00 00 01
    //低------------>高
    //0x 10 00 00 00	小端
    //0x 00 00 00 01	大端
	char j = *((char*)&i);
	if (j==0)
		printf("大端");
	else
		printf("小端");
	return 0;
}
int main()
{
    union U
    {
        int a;
        char b;
    }u;
    u.a=1;
    //0x 00 00 00 01
    //低------------>高
    //0x 10 00 00 00	小端
    //0x 00 00 00 01	大端
	if (u.b==0)
		printf("大端");
	else
		printf("小端");
	return 0;
}

1.2 联合大小的计算
  • 联合的大小至少是最大成员的大小
  • 当最大成员大小不是最大对齐数的整数倍的时候,就要对齐到最大对齐数的整数倍

比如:

union un1
{
	char arr[5];		//5
	int i;		//4
}u;
int main()
{
	printf("%d\n",sizeof(u));	//当最大成员大小不是最大对齐数的整数倍的时候
                                //就要对齐到最大对齐数的整数倍,所以是8
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值