前の章で学んだように、構造体は型の一種なので、構造体へのポインタを考える 時には、その構造体型へのポインタになる。
例 1 struct Pen { char color[20]; int hutosa; } pen; struct Pen *ppen; |
上の例では、構造体 Pen 型を考え、構造体 Pen 型へのポインタ ppen を宣言して いる。従って、ポインタ ppen は構造体 Pen 型の変数のアドレスを保持する事が 出来るので、
例 2 ppen = &pen; |
のように使う事が出来る。
実際には、関数同士で構造体のデータをやり取りするときに最も良く使われ、関数の 呼び出し元で構造体のアドレスを渡す事になる。
例 3 struct Pen { char color; int hutosa; }; void init( struct Pen *); main(){ struct Pen pen; init(&pen); } init( struct Pen *ppen){ ... |
上の例では、main()
関数で関数 init()
を呼ぶ際に、構造体変数
pen
のアドレスを init()
に渡しており、呼び出される関数
init()
ではアドレスを受け取れるように引数にはポインタを用いている。
このように、変数のアドレスを渡すときには、渡される側でポインタとして受け取る
ようにする訳である。従って、ポインタ ppen
は main()
関数で確保
された構造体変数 pen
を指している点に注意しよう。