Skip to content

Latest commit

 

History

History
84 lines (66 loc) · 2.33 KB

16-结构体-枚举-联合体.md

File metadata and controls

84 lines (66 loc) · 2.33 KB

1 结构体

数组只能存储类型相同的元素,如果需要在一个数据结果中存储不同的数据类型,可以使用结构体。


定义结构体

     //形式1:只声明
     struct Student {
        int num;            //4
        char name[20];      //20
        char sex;           //1
        int age;            //4
        float score;        //4
        char address[20];   //20
    };
    
    //形式2:声明并定义
    struct Date1 {
        int month;
        int year;
        int day;
    } date1, date2;

    //形式3:匿名结构体
    struct {
        int month;
        int year;
        int day;
    } date3;

结构体内部的元素可以称为成员列表或域表

  • 结构体中可以嵌套声明
  • 声明结构体只是定义了一种数据模型,并没有定义变量,其本身不占内存

位域

使用位域可以更好的利用内存空间。 位域声明:

 struct
    {
      type [member_name] : width ;
    };
  • type:整数类型,决定了如何解释位域的值。类型可以是整型、有符号整型、无符号整型。
  • member_name:位域的名称。
  • width:位域中位的数量。宽度必须小于或等于指定类型的位宽度。

关于位域有以下特点:

  • 一个位域必须存储在同一个字节中,不能跨两个字节。如一个字节所剩空间不够存放另一位域时,应从下一单元起存放该位域。也可以有意使某位域从下一单元开始。
  • 由于位域不允许跨两个字节,因此位域的长度不能大于一个字节的长度。
  • 位域可以无位域名,这时它只用来作填充或调整位置。无名的位域是不能使用的。

2 联合体

联合体中的所以数据都放在同一个地址开始的内存单元中。每一瞬间,联合体只能存储其中一个成员

 //联合体中的所以数据都放在同一个地址开始的内存单元中。每一瞬间,联合体只能存储其中一个成员
    union Date {
        int i;
        char ch;
        float f;
    };

3 枚举

如果一个变量只有集中可能的值,可以定义枚举类型,c语言对枚举的元素按照常量处理,每一个枚举都是int类型,默认从0开始,

   //定义枚举
    enum Weekday {
        sun, mon, tue, wed, thu, fri, sta
    };