美文网首页
Head First C 学习之结构体、联合、枚举、为字段(st

Head First C 学习之结构体、联合、枚举、为字段(st

作者: 燚随风 | 来源:发表于2016-03-28 12:00 被阅读46次
    结构体

    位于Head First C 第220页:

    struct fish {
    const char *name;
    const char *species;
    int teeth;//牙齿
    int age;
    };
    
    • 结构的大小固定
    • 结构中的数据都有名字
    struct fish snappy = {"Snappy","Piranha",69,4};
    printf("Name = %s\n",snappy.name);
    
    • 结构体和数组有些相像,但不能像数组那样取值。读取是只能按名访问。
    • 定义结构时,并没有让计算机在存储器只能够创建任何东西,只是割了计算机一个模板。
    • 定义新的机构变量时才会在存储器中为结构体创建足够大的空间。(位于Head First C 第226页的聚焦存储器中的结构
    可以用typedef为结构体命名(同样适用于联合、枚举):

    位于Head First C 第232页:

    typedef struct fish {
    const char *name;
    const char *species;
    int teeth;//牙齿
    int age;
    }yue;

    * `typedef`为结构创建别名,其实就是类型名,也就是说结构体有了两个名字,一个是结构名(`struct fish`),另一个是类型名(`yue`)。
    

    这样初始化就可以写成这样:

    yue snappy = {"Snappy","Piranha",69,4};

    >* 用`typedef`定义结构时可以省略结构名
    
    ######结构体指针
    位于Head First C 第240页:
    >```
    >(*t).age !=*t.age
    >(*t).age == t->age
    >```
    
    ***
    #####联合 union:可以有效的使用存储空间
    位于Head First C 第247页:
    

    typedef union {
    shot cunt;
    float weight;
    float volume;
    } quantity;

    当定义联合时,计算机只为其中一个分配空间,`quantity`的所有字段将保存在同一个地址。
    联合的使用:
    >######C89方式:
    

    quantity q = {4};
    //保存第一个字段的值,可以用这种方式。

    >######指定初始化器:
    

    quantuty q =(.weight=1.5);

    `『指定初始化器』`也可以用来设定结构体字段的初值。
    >######`"."`表示法:
    

    quantity q;
    q.volume = 3.7;

    
    ***
    ==联合中保存各种可能的值,但保存后没就无法知道它的类型了,所以一般需要创建`枚举`来一起使用==
    
    #####枚举 enum 
    位于Head First C 第255页
    

    enum colors {RED,GREEN,PUCE};
    enum colors favorite = PUCE;

    枚举变量中保存的实际是数字,所以枚举哦你过来保存符号.
    ==结构体和联合用`;`来分割数据项,而枚举用`,`==
    
    ***
    
    
    #####结构体、联合、枚举一般是配合着使用:
    位于Head First C 第258页
    

    include <stdio.h>

    typedef enum {
    COUNT,POUNDS,PINTS//计数、磅、品脱
    } unit_of_measure;

    typedef union {
    short count;
    float weight;
    float volume;
    } quantity;

    typedef struct {
    const char *name;
    const char *country;
    quantity amounat;
    unit_of_measure units;
    } fruit_order;

    void display(fruit_order order)
    {
    printf("This order countais ");
    if (order.units== PINTS)
    printf("%2.2f pints of %s\n",order.amounat.volume,order.name);
    else if (order.units == POUNDS)
    printf("%2.2f lbs of %s\n",order.amounat.weight,order.name);
    else
    printf("%i %s\n",order.amounat.count,order.name);
    }
    int main()
    {
    fruit_order apple = {"apples","England",.amounat.count = 144,COUNT};
    fruit_order strawberries = {"strawberries","Spain",.amounat.weight = 17.6,POUNDS};
    fruit_order oj = {"orange juice","U.S.A",.amounat.volume = 10.5, PINTS};
    display(apple);
    display(strawberries);
    display(oj);
    return 0;
    }

    ***
    #####位字段(bitfield)
    位于Head First C 第262页:
    

    typedef struct {
    unsigned int low_pass_vcf:1;
    unsigned int filter_coupler:1;
    unsigned int reverb:1;
    unsigned int sequential:1;
    } synth;

    可以更有效的节省空间

    相关文章

      网友评论

          本文标题:Head First C 学习之结构体、联合、枚举、为字段(st

          本文链接:https://www.haomeiwen.com/subject/lvujlttx.html