Head First C学習の構造体、連合、列挙、フィールド(strcut、union、enum、bitfield)

3772 ワード

こうぞうたい
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
    ",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

    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
    ",order.amounat.volume,order.name);
    else if (order.units == POUNDS)
    printf("%2.2f lbs of %s
    ",order.amounat.weight,order.name);
    else
    printf("%i %s
    ",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;