【C语言】联合体和结构体

一、前言

      通过学习这两个要从内存这个方面来了解以下,所以小编准备了对这个问题的总结,通过对比学习会更加的深刻了解。

二、内容要点

  • union – 联合体,它的成员共享同一内存,内存分配时,考虑占内存最多的那个成员。

  • struct – 结构体,它的每个成员都有自己的内存空间,但空间在同一区域块,分配时还考虑4字节对齐(即不满4的倍数时,凑满到4的倍数)。

三、代码示例

#include<stdio.h>
main()
{
    union 
    {
        char c;
        int i;
        float a ;

    } test; // float 最长,为4 字节。分配4字节。

    struct t 
    {  
        int i;
        char c; 
        float a; 
    }test2;  //i 4 字节, c 1 字节, a 4字节, 共需 9 字节,考虑 4 字节 对齐,分配 12 字节。
    int j;
    test.i=0x1234;   
    test.c='A';    //A对应的16进制的ASCII码为41H
    printf("%x\n",test.i);
    printf("%c\n",test.c);
    printf("%d %d \n",sizeof(test),sizeof(test2));  
    scanf("%x",&j);
}

运行结果:

结果

分析:

      小编直接做的时候就写的是1234 ,显然是不对的,没有理解到union的作用。对于本题,int 是4字节, float是4字节,都是最大的,所以这个union的联合体就是4字节。当我们把test.i=0x1234 存入内存的时候,会现存低字节的34,然后在存储高字节的12,当我们存完后结果暂时是3412;后来我们又存储了test.c=’A’,A对应的16进制的ASCII码为41H,所以就会把低字节的34挤掉,结果就变成了1241.

四、小结

类型

C语言-数据类型大小总结:

变量的长度(VC6环境下)

1Byte =8bit ,一字节等于8位。

类型大小(32位机)(Byte 字节)范围(Byte 字节)
char1128 ~ +127
short2-32767 ~ + 32768
int4-2147483648 ~ +2147483647
long40~0xffffffffUL
float4+/- 3.40282e+038
double81.7 * 10^308
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你个佬六

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值