今、あるものを製作中なのですが、
ある関数の引数に「DIBヘッダのポインタ」というものがありました。
「DIBヘッダ」も「ポインタ」もわかるのですが、
「DIBヘッダのポインタ」の意味がわかりません。
念のために「BITMAPFILEHEADER *a」とやってみたのですが、
そうなると「'a'に値が割り当てられていない」と怒られてしまいます。
自分の宣言が間違っているか、ただ単にビルドエラーのどちらかかとは思っているので
すが…
解決法がわからないので質問させていただきました。
ご回答よろしくお願いいたします
追記です。
>'a'に値が割り当てられていない
xxx(a);
とした場合です。
> 解決法がわからないので質問させていただきました。
> ご回答よろしくお願いいたします
「ある関数」の制作者にお聞き下さい。
だいたい引数の形はプロトタイプ宣言に書いてあるでしょ。
プロタイプ宣言無しで関数を使うのはバグの元だからやめてね。
プロトタイプ宣言が
void xxx(BITMAPFILEHEADER*);
ならば、
BITMAPFILEHEADER *a;
xxx(a);
で呼び出しは可能なはず。ただし、aには不定値が入っているので正しく動作しない。
BITMAPFILEHEADER a;
xxx(&a);
なら正しく動作するかも。
関数作った人じゃないから推測だけど。
引数が(BITMAPFILEHEADER*)型で
BITMAPFILEHEADER *a;
のaをそのまま渡すのは間違えだな。
BITMAPFILEHEADER b;
BITMAPFILEHEADER * a = &b;
として、aを渡すなら動作するけど。
BITMAPFILEHEADER *a;
のそのままでは、このポインタは適切なメモリを指していないから
不正なメモリアクセスやプログラムが誤動作することになる。
------
ポインタで渡す、つまり
BITMAPFILEHEADER a;
func(&a);
とする利点は2つ(たぶん)
(1) サイズが大きい構造体は引数へコピーを行うのと効率が悪い。
変数aの場所を渡すなら4バイトや8バイト程度のコピーですむ。
(2) func関数で引数aの中の値を書き換えて返したいから
変数aの場所を渡す。