- 31 名前:デフォルトの名無しさん [2008/02/15(金) 00:15:23 ]
- >>29
ファイルポインタはファイル操作関数を使うことでfpが示すアドレスが変わるだろ? で、fpのバッファはmainが持ってるわけで、 このmainが持ってるバッファ内の値=アドレスが変わる。 ここまではOKのはず。 で、function(fp)だと、関数はバッファ内の値=アドレスを受けるわけ。 下位関数は受けた値=アドレスを上位関数が持ってるバッファとは違うスタック領域へ格納するので、 この関数内でファイル操作関数を使うと、 スタック領域に格納されたアドレスは変わるけど、 上位関数が持ってるfpバッファ内のアドレスは変わらないんだよ。 そこでfpのアドレス=アドレスが格納されてるバッファのアドレス=&fpを下位関数に渡すことで、 下位関数でのファイル操作の結果を上位関数が持ってるバッファ内のアドレスへ反映させるんだよ。 ポインタのポインタになるからわかりにくいけど、 [FILE [*fp]]を[int [iDat]]と考えれば同じこと。 上位関数のiDatを下位関数に渡しても上位関数が持ってるiDatの値は変わらないけど、 &iDatを渡して*iDatで受ければ、下位関数内で*iDatの中身を変更すれば、 上位関数が持ってるiDatの中身も変わる。 fpはポインタだから&fpで渡して**fpで受けて関数内では*fpで使う。
|

|