b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

sizeof计算结构体大小 位段,枚举,联合的讲解(2)

电脑杂谈  发布时间:2018-01-04 14:08:40  来源:网络整理

#include<stdio.h>
int main()
{
    int i, j;
    int mon[32];
    enum Day // 星期
    {
        Mon = 1,
        Tues,
        Wed,
        Thur,
        Fri,
        Sat,
        Sun
    };
    j = Mon;
    for (i = 1; i < 32; i++)
    {
        mon[i] = j;
        j++;
        if (j > Sun)
        {
            j = Mon;
        }
    }
    for (i = 1; i < 32; i++)//打印31天内的周一到周日
    {
        switch (mon[i])
        {
        case 1: printf(" %2d", mon[i]); break;
        case 2: printf(" %2d", mon[i]); break;
        case 3: printf(" %2d", mon[i]); break;
        case 4: printf(" %2d", mon[i]); break;
        case 5: printf(" %2d", mon[i]); break;
        case 6: printf(" %2d", mon[i]); break;
        case 7: printf(" %2d", mon[i]); break;
        default:break;
        }

        if (0 == i % 7)
        {
            printf("\n");
        }
    }
    printf("\n");
}

三、联合

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

union Un
 {    
int a;   
char b;
short c;
}; 

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

当最大成员大小不是最大对齐数的整数倍的时候,就要对齐到最大对齐数的整数倍。

int main()
{
    union Un
    {
        int i;
        char c;
    };
    union Un un;

    //因为两个成员占用相同内存,所以地址相同
    printf("%p\n", &(un.i));
    printf("%p\n", &(un.c));

    un.i = 0x11111111;

    //因为char类型是1字节,16进制表示,char类型只能用2个数字,如果多于2个数字会发生类型截断
    un.c = 0x22;

    //??输出286331170,因为共用一块内存且小端存储,所以本应0x11111111变为0x11111122,十进制表示??286331170
    printf("%d\n", un.i);
}


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-58115-2.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    • 张扩
      张扩

      第一次听说南方黑芝麻糊出问题

    • 楚武王熊通
      楚武王熊通

      美国主子这不是变相承认中国人造岛礁是领土吗

      • 秦灵公
        秦灵公

        好像因工艺流程不同调和油要放心一点

    热点图片
    拼命载入中...