欢迎光临
我们一直在努力

C语言联合体和枚举总结

除了结构体,C语言中还能创建其他类型,如联合体和枚举。

联合体使用union声明,声明方法类似结构体,访问也类似。

union examp{
char a;
int b;
}u;

u.a = 1;

不同的是,编译器只为最大成员分配足够空间,所有成员共用一块空间。

union examp{
char a;
int b; //只分配4个字节
}u;

由于共用空间的特性,后存的数据会覆盖先存的数据,因此联合体并不适合存多种信息。

我们可以用联合体来判断大小端排序:

int check_sys()
{
union Un
{
char c;
int i; //分配4个字节
}U;

u.i = 1;
return u.c; //大端存的是01 00 00 00(最后一个字节地址由低到高)
} //小端存的是00 00 00 01(最后一个字节地址由低到高)

联合体大小至少是最大成员大小,且总大小必须是成员对齐数中最大值的整数倍。

枚举使用enum声明,内部是所有可能取值,用“ , ”进行分隔。如:

enum {
Mon, //内部都是整型常量,第一个默认为0,后面+1递增
Tue, //值为1
Wed, //2
Thu, //3
Fri, //4
Sat, //5
Sun //6
};

可以初始化为其他值,后面依旧递增。

enum {
Mon, //内部都是整型常量,第一个默认为0,后面+1递增
Tue, //值为1
Wed = 5, //5
Thu, //6
Fri, //7
Sat, //8
Sun //9
};

后面写代码时要用这个常量时可换成对应名称,如使用switch语句时:

switch(day)
{
case Mon:
case Tue:
case Wed:
default:
}

这样可以增加代码的可读性与可维护性,因为用文字比用数字意义更明确。而且用枚举有类型检查,比#define更严谨。

赞(0)
未经允许不得转载:171主机测评 » C语言联合体和枚举总结
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址