自定义类型——联合体

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
//联合,又名共用体
// 这种类型定义的变量也包含一系列的成员,特征是这些成员公用同一块空间
// 
//联合的声明
/*union Un
{
    int a;
    char c;
};*///联合的地址和各成员的地址相同。
//可以类比生活中的合租
//独立房间就可以理解为结构体
//联合体最巧妙的应用场景就是在一定程度上节省了空间
//一个联合体的大小至少是最大的成员的大小,因为联合体至少得有能力存下最大的成员
//访问联合体成员的方式与结构体相同
//int main()
//{
//    union Un u;
//    printf("%u", sizeof(u));
//    return 0;
//}

//判断当前机器是大端存储还是小端存储
//int main()
//{
//    int a = 1;
//    if (*(char*)&a == 1)
//    {
//        printf("您的机器是小端存储");
//    }
//    else
//    {
//        printf("您当前的机器是大端存储");
//    }
//    return 0;
//}

//或者采取用联合体的方式
//int main()
//{
//    union Un 
//    {
//        char c;
//        int i;
//    }u;
//    u.i = 1;
//    if (u.c == 1)
//    {
//        printf("当前机器是小端字节序存储");
//    }
//    else
//    {
//        printf("当前机器是大端字节序存储");
//    }
//    return 0;
//}


//联合体的大小
//联合体的大小至少是最大对齐数的倍数
union Un
{
    char arr[5];
    int i;
}u;
int main()
{
    printf("%u", sizeof(u));    
    //结果是8, 因为联合体需要5个字节,而联合体的大小至少是最大对齐数的倍数
    //以上联合体的最大对齐数是4
    
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值