C语言系列(21)——联合体、枚举

一、什么是联合体(共用体)

联合体是一种特殊的数据类型,允许您在相同的内存位置存储不同的数据类型。

您可以定义一个带有多成员的共用体,但是任何时候只能有一个成员带有值。
共用体提供了一种使用相同的内存位置的有效方式。

二、联合体定义
  • 语法:
union
{
     //成员1
     //成员2
} 变量名;
  • 定义1:
union
     {
         int a;//成员 a
         float f;//成员 f
} data;//联合体变量,变量名为data
  • 定义2:
union MyData
{
     int a;//成员 a
     float f;//成员 f
};//定义了一个联合体类型,为union MyData

union MyData data;//定义了一个MyData的联合体变量,变量名为data
  • 定义3:
typedef union MyData
{
     int a;//成员 a
     float f;//成员 f
};//定义了一个联合体类型,为union MyData,重命名为MyData

MyData data;//定义了一个MyData的联合体变量,变量名为data
三、联合体的使用

使用 定义3 中定义的data变量

//共享同一个内存地址
data.a = 10;//a赋值,会影响f的值
printf("%d, %f\n", data.a, data.f);
data.f = 10;//f赋值,会影响a的值
printf("%d, %f\n", data.a, data.f);

打印输出:

10
0.000000
1092616192
10.000000

以上示例,data.adata.f 共用一段内存空间,给a赋值,则f同样受到影响;给f赋值则a的值也会变化。

  • 大端小端
    大端小端,实际上是指,数据存储在内存的顺序。

大端模式,是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放;这和我们的阅读习惯一致。

小端模式,是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中,这种存储模式将地址的高低和数据位权有效地结合起来,高地址部分权值高,低地址部分权值低。

数据1在大端小端模式下的存储方式:
大端小端

  • 怎么判断内存中数据存储是大端模式还是小端模式?
typedef union
{
     int a;
     char c;
}MyUnion;

MyUnion u;
u.a = 1;
printf("%d, %d\n", u.a, u.c);

上述如果打印1则为小端、如果打印0则为大端

四、枚举

是一个被命名的整型常数的集合。

枚举在日常生活中很常见,例如表示星期的SUNDAY、MONDAY、TUESDAY、WEDNESDAY、THURSDAY、FRIDAY、SATURDAY就是一个枚举。

  • 枚举定义
typedef enum
{
     SUNDAY,//默认值为0
     MONDAY,//在上个值的基础上增1
     TUESDAY,//以此类推
     WEDNESDAY,
     THURSDAY,
     FRIDAY,
     SATURDAY
}WEEK;
WEEK week = SUNDAY;//定义和赋值
  • 例:
printf("%d, %d, %d\n", SUNDAY, MONDAY, FRIDAY); // 枚举被定义后,可以当做一个常量使用
switch (week)
 {
 case SUNDAY:
     printf("星期天\n");
     break;
 case MONDAY:
     printf("星期一\n");
     break;
 default:
     break;
 }

打印:

0, 1, 5
星期天
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值