C语言_自定义类型_枚举 联合

C语言的自定义类型除了结构体之外,还有枚举,联合。

枚举
  • 顾名思义,就是一一列举。

枚举类型的定义

enum Sex//性别
{
    MALE,
    FEMALE,
    SECRET
};
enum Color//颜⾊
{
    RED,
    GREEN,
    BLUE
};

以上定义的 enum Sex , enum Color 都是枚举类型。
{ }中的内容是枚举类型的可能取值,也叫 枚举常量 。这些可能取值都是有值的,默认从0开始,依次递增1,当然在定义的时候也可以赋初值。
例如:

enum Color//颜色
{
    RED=1,
    GREEN=2,
    BLUE=4
};

枚举的使用:

enum Color//颜⾊色
{
    RED=1,
    GREEN=2,
    BLUE=4
};
enum Color clr = GREEN;/* 只能拿枚举常量量给枚举变量量赋值
                        才不不会出现类型的差异。*/

枚举的优点

  1. 增加代码的可读性和可维护性
  2. 与#define定义的标识符相比,枚举有类型检查,更加严谨。
  3. 防止命名污染(封装)
  4. 便于调试
  5. 使用方便,一次可以定义多个常量。
联合

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

比如:

//联合类型的声明
union Un
{
    char c;
    int i;
};
//联合变量的定义
union Un un;
//计算联合变量的大⼩
printf("%d\n", sizeof(un));

联合的成员是共用同一块内存空间的,这样一个联合变量的大小,至少是最大成员的大小。

  • 面试题
    写程序判断当前计算机是大端还是小端存储。
union A
{
    char i;
    int j;
};

int main()
{
    union x.j = 1;
    if(x.i == 0)
    {
        printf("大端\n");
    }
    else
    {
        printf("小端\n");
    }
}

x.j = 1,大端存储为00 00 00 01,如果x.i = 0,说明它的存储形式的确是00 00 00 01
,如果是小端,那么就是反的,存储为01 00 00 00 ,那么x.i = 1

联合大小的计算

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

联合与结构体的巧妙使用:

//将long类型的IP地址,转为点分十进制的表示形式
union ip_addr
{
    unsigned long addr;
    struct
    {
        unsigned char c1;
        unsigned char c2;
        unsigned char c3;
        unsigned char c4;
    }ip;
};
union ip_addr my_ip;
my_ip.addr = 235729910;
printf("%d.%d.%d.%d\n", my_ip.ip.c4, my_ip.ip.c3, my_ip.ip.c2, my_ip.ip.c1);

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值