DIBヘッダ c++

[戻る]
take東 2008/09/29(月) 13:23:39
今、あるものを製作中なのですが、

ある関数の引数に「DIBヘッダのポインタ」というものがありました。

「DIBヘッダ」も「ポインタ」もわかるのですが、

「DIBヘッダのポインタ」の意味がわかりません。


念のために「BITMAPFILEHEADER *a」とやってみたのですが、

そうなると「'a'に値が割り当てられていない」と怒られてしまいます。

自分の宣言が間違っているか、ただ単にビルドエラーのどちらかかとは思っているので
すが…

解決法がわからないので質問させていただきました。
ご回答よろしくお願いいたします

take東 2008/09/29(月) 13:24:52
追記です。

>'a'に値が割り当てられていない

xxx(a);

とした場合です。

... 2008/09/29(月) 13:44:43
マルチ
http://soudan1.biglobe.ne.jp/qa4364441.html

maru 2008/09/29(月) 15:20:52
> 解決法がわからないので質問させていただきました。
> ご回答よろしくお願いいたします
「ある関数」の制作者にお聞き下さい。

だいたい引数の形はプロトタイプ宣言に書いてあるでしょ。
プロタイプ宣言無しで関数を使うのはバグの元だからやめてね。
プロトタイプ宣言が
  void xxx(BITMAPFILEHEADER*);
ならば、
  BITMAPFILEHEADER *a;
  xxx(a);
で呼び出しは可能なはず。ただし、aには不定値が入っているので正しく動作しない。

  BITMAPFILEHEADER a;
  xxx(&a);
なら正しく動作するかも。

wclrp ( 'o') 2008/09/30(火) 00:07:32
関数作った人じゃないから推測だけど。

引数が(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の場所を渡す。

古いスレッドには追加発言できません。