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 型変数を宣言 */