DIBヘッダ c++ – プログラミング – Home

通知
すべてクリア

DIBヘッダ c++


take東
 take東
(@take東)
ゲスト
結合: 16年前
投稿: 2
Topic starter  

今、あるものを製作中なのですが、

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

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

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

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

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

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

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


引用解決済
トピックタグ
take東
 take東
(@take東)
ゲスト
結合: 16年前
投稿: 2
Topic starter  

追記です。

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

xxx(a);

とした場合です。


返信引用
...
 ...
(@...)
ゲスト
結合: 22年前
投稿: 113
 

マルチ
http://soudan1.biglobe.ne.jp/qa4364441.html


返信引用
maru
 maru
(@maru)
ゲスト
結合: 17年前
投稿: 358
 

> 解決法がわからないので質問させていただきました。
> ご回答よろしくお願いいたします
「ある関数」の制作者にお聞き下さい。

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

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


返信引用
wclrp ( 'o')
 wclrp ( 'o')
(@wclrp ( 'o'))
ゲスト
結合: 18年前
投稿: 287
 

関数作った人じゃないから推測だけど。

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


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました