C语言从零开始——union联合体

/*
        联合体(共用体):一种数据结构;里面变量共用一个内存首地址,各种变量名可
以同时使用,操作同时生效
        和struct区别:
        1,结构体中所有变量都是共存的,有一个成员变量,就开辟一个变量类型的内存>空间;这种数据结构内存空间分配是粗放的,不管用不用,都会分配
        2,联合体中各个变量不共存,所有变量共用一个内存首地址(开辟原则,选成员>变量中变量类型最大的);这种数据结构,节省内存,使用精细灵活
*/

演示代码:union_1.c

#include <stdio.h>
union un //定义联合体结构,里面有三个成员变量,int数据类型最大,所以当定义该结构体变量时,内存开辟四个字节空间大小
{
        int a;
        char b;
        float c;
}d; //定义该结构体变量d,d为全局变量

int main(void)
{
        printf("sizeof(d) = %d \n",sizeof(d));  //测试输出sizeof(d) 为4
        union un u; //实例化联合体结构变量u
        u.a = 12;  //初始化成员a
        printf("u.a = %d \n",u.a);
        printf("u.b = %d \n",u.b);
        printf("u.c = %f \n",u.c);

        printf("u.a address = %p \n",&u.a);
        printf("u.b address = %p \n",&u.b);
        printf("u.c address = %p \n",&u.c);
        return 0;
}
/*
sizeof(d) = 4 
u.a = 12 //只定义了u.a 但是u.b也是12,说明只开辟了一个空间,成员共同使用
u.b = 12 
u.c = 0.000000  //之所以不是12,因为float和int不能简单的忽略类型表示,两个数据类
型在表达时有冲突

u.a address = 0x7fff846eee50 
u.b address = 0x7fff846eee50 
u.c address = 0x7fff846eee50 //三个成员变量地址是一样的,以内整个联合体只开辟了4个字节空间供所有成员使用
*/
####   内存存储大端小端问题   ####

/*
        内存中数据是如何存放?大端还是小端,运用联合体可以进行测试
        0x12345678
        address:
        small_endian: 12 34 56 78 //所有操作系统都是小端存储
        big_endian:   78 56 34 12 //网络传输都是大端模式
*/
演示代码:union_2.c

#include <stdio.h>
union un
{
        int a;
        char b;
        float c;
};

int main()
{
        union un u;
        u.a = 130;
        printf("u.a = %d \n",u.a);
        printf("u.b = %d \n",u.b);
/*
        如果是小端存储:u.a = 0000 0000 0000 0001
                        u.b =                0001
        如果是大端存储:u.a = 0001 0000 0000 0000
                        u.b =                0000
*/
        return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值