地方エンジニアの学習日記

興味ある技術の雑なメモだったりを書いてくブログ。たまに日記とガジェット紹介。

sizeof演算子

sizeof演算子は2種類の使い方があります.

sizeof(型) sizeof 変数や定数,あるいは式など

    1:(struct _data*)0               0をポインタと見なして、struct _data型にキャスティングする。
    2:((struct _data*)0)->C          キャスティングした結果をもとに、変数Cを参照する。
    3:&(((struct _data*)0)->C)       参照したアドレスを読み出す。
    4:                               この時点で、0を基点としたCまでの距離が求められる。
    5:(int)&(((struct _data*)0)->C)  読み出したアドレスをint型にキャスティングする。

構造体宣言

struct _person {           /* _person がタグ名 */
    char name[20];        /* 文字配列型のメンバ name */
    char sex;              /* 文字型メンバ sex */
    int age;               /* 整数型メンバ age */
    double height;         /* 倍精度実数型メンバ height */
    double weight;         /* 倍精度実数型メンバ weight */
};

struct _person p;      /* p という名前の struct _person 型変数を宣言 */

構造体の初期化は今風に書くとしたの感じになるらしい

typedef struct _person {           /* _person がタグ名 */
        int age;               /* 整数型メンバ age */
        double height;         /* 倍精度実数型メンバ height */
        double weight;         /* 倍精度実数型メンバ weight */
} person;


person p = {
        .age = 20,
        .height = 20,
        .weight = 20,
};      /* p という名前の struct _person 型変数を宣言 */