Linux C语言学习day12:终章:共用体,枚举

本文详细介绍了C语言中的共用体(Union)和枚举(Enum)数据类型。共用体允许不同数据类型在相同内存位置存储,节省空间,但同一时刻仅能保存一个成员的值。枚举则提供了一种预定义值的数据类型,可用于定义一系列常量。通过示例展示了如何使用共用体进行内存大小计算和判断系统字节序,以及枚举在处理星期几的场景。
摘要由CSDN通过智能技术生成

【1】共用体
概念:不同数据类型的数据使用共同的存储区域,这种数据构造类型称为共用体,又称联合体。
定义格式: 
     union
     {
        成员列表;
     };
 例如:
     union data
     {
       char  cval;
       int   ival;
       float fval;
     };
共用体类型变量定义:
   (1)先定义共用体类型,后定义变量。
      union data
     {
       char  cval;
       int   ival;
       float fval;
     };
     union data a,b,c;
   (2)定义共用体类型的同时定义变量。
    union data
     {
       char  cval;
       int   ival;
       float fval;
     }a,b,c;
     如果不再定义新的变量,也可以将共用体的名字省略:
     union
     {
       char  cval;
       int   ival;
       float fval;
     }a,b,c;
     
计算大小:
  结构体占用内存大于等于所有成员占用内存的总和,因为成员之间可能存在空隙,而共用体占用的内存空间,等于最大的成员变量占用的内存。
  共用体采用了内存覆盖技术,同一时刻只能保存一个成员的值,如果对新的成员赋值,会覆盖掉原有的成员数据。
  比如 :共用体data里占用内存最大的是int类型数据,占用4个字节,那么共用体data占用的内存大小为4。
    
union test
{
  char s[20];
  int b;
  double c;
}a;
sizeof(a) = 20;

通过共用体验证大小端:
#include<stdio.h>
union test
{
  char a;
  int b;
}num;                                   
int main(int argc, const char *argv[])
{
    num.b = 0x12345678;
    printf("%#x\n",num.a);

    return 0;
}

【2】枚举:
    定义:只能取预先定义值的数据类型是枚举类型。
    格式: enum 枚举类型名
         {
           枚举元素列表
         };
      例如:  列出一个星期有几天:
              enum week
              { 
                 Mon, Tues, Wed, Thurs, Fri, Sat, Sun 
              };
              可以看到,我们仅仅给出了名字,却没有给出名字对应的值,
              因为枚举值默认从0开始,往后逐个加1,也就是说,week 中的 Mon、Tues ...... Sun
              对应的值分别为 0、1 ...... 6。
              
              我们也可以给每个名字都指定一个值:
              enum week
              { 
                Mon = 1, Tues = 2, Wed = 3, Thurs = 4, Fri = 5, Sat = 6, Sun = 7 
              };
              由于枚举类型值逐个递增1,我们也可以只给第一个名字指定一个值:
              enum week
              { 
                Mon = 1, Tues, Wed, Thurs, Fri, Sat, Sun 
              };
    说明:   1)枚举类型是一种类型,通过它可以定义枚举变量
               enum week a,b,c;
            2)可以将列表里的值赋给枚举变量
               enum week a = Mon, b = Web, c = Sat;
            3)枚举列表中的Mon、Tues、Wed这些标识符的作用范围是全局的(严格来说是 main() 函数内部)
            不能再定义与他们名字相同的变量。
            4)Mon、Tues、Wed等都是常量,不能再次赋值,只能将他们赋给其他变量。
    示例:判断用户输入的是星期几。
            #include <stdio.h>
             int main(){
             enum week{ Mon = 1, Tues, Wed, Thurs, Fri, Sat, Sun } day;
             scanf("%d", &day);
             switch(day){
                case Mon: puts("Monday"); break;
                case Tues: puts("Tuesday"); break;
                case Wed: puts("Wednesday"); break;
                case Thurs: puts("Thursday"); break;
                case Fri: puts("Friday"); break;
                case Sat: puts("Saturday"); break;
                case Sun: puts("Sunday"); break;
                default: puts("Error!");
              }    
              return 0;
            }    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值