ページ 11

構造体配列のポインタ

Posted: 2011年6月28日(火) 22:34
by ざこ
初歩的な質問ですいません・
構造体を配列にいれて、ポインタを用いて表示したいです。

//構造体の宣言
typedef struct{
int x, y;
int image;
int flag;
}SPointer_t;
//画像ハンドル
static int sbox0h, sbox1h, sbox2h, sbox3h;
//構造体配列の中身
SPointer_t SPointer[4]={
{88, 179, sbox0h, 1},
{233, 177, sbox1h ,0},
{209, 113, sbox2h,0},
{51, 312, sbox3h ,0},
};
//ポインタの宣言
SPointer_t *SPointerP;
//画像のロード
sbox0h = LoadGraph("selectbox0.png");
sbox1h = LoadGraph("selectbox1.png");
sbox2h = LoadGraph("selectbox2.png");
sbox3h = LoadGraph("selectbox3.png");
//描画(とりあえずSPointer[0]だけ)
DrawGraph(0, 0, SPointerP->image, TRUE);

この順番で処理しても画像は表示されませんでした・・・
1日費やしてしまいましたが結局詰まっています。
おそらくSPointerに何も格納されていないようです。

どなたか間違いを探して頂けると助かります。

Re: 構造体配列のポインタ

Posted: 2011年6月28日(火) 23:03
by box
ざこ さんが書きました:

コード:

//ポインタの宣言
SPointer_t *SPointerP;
SPointerPがどこを指しているか不定なのに
ざこ さんが書きました:

コード:

//描画(とりあえずSPointer[0]だけ)
DrawGraph(0, 0, SPointerP->image, TRUE);
こんなことをしてはいけません。
コメントにある「(とりあえずSPointer[0]だけ)」というのは幻想に過ぎません。

Re: 構造体配列のポインタ

Posted: 2011年6月28日(火) 23:04
by non
>DrawGraph(0, 0, SPointerP->image, TRUE);
これを、
DrawGraph(0, 0, SPointer[0].image, TRUE);
に変更したらうまく画像は表示されますか?
もしそうなら、
SpointerP=&SPointer[0];
をしておけば、動くかも?

Re: 構造体配列のポインタ

Posted: 2011年6月28日(火) 23:21
by ざこ
返信ありがとうございます。
すいません、ポインタの値は設定していましたが、入力し忘れてしまいました。
ぼーっとしていて申し訳ないです。

DrawGraph(0, 0, SPointer[0].image, TRUE);

では表示されませんでした。ですが

DrawGraph(0, 0, sbox0h, TRUE);

では表示されました。
僕が思うには、

SPointer_t SPointer[4]={
{88, 179, sbox0h, 1},
{233, 177, sbox1h ,0},
{209, 113, sbox2h,0},
{51, 312, sbox3h ,0},
};

に何らかの問題があるのだと思うのですが、この部分は間違いないのでしょうか?
例えば、SPointer[0].x = 88といった具合に格納されはいるのですか?

Re: 構造体配列のポインタ

Posted: 2011年6月28日(火) 23:26
by bitter_fox
ざこ さんが書きました: typedef struct{
int image;
}SPointer_t;
//画像ハンドル
static int sbox0h, sbox1h, sbox2h, sbox3h;
//構造体配列の中身
SPointer_t SPointer[4]={
{88, 179, sbox0h, 1},
};
//画像のロード
sbox0h = LoadGraph("selectbox0.png");
仮にこの順番で代入が行われているのであれば問題があります。
SPointerの宣言の際に代入したのはsbox0hが持っている値であり、その後のsbox0hに対する代入によるSPoint.imageの変化は起きません。

こういう時こそポインタを使ってください。

Re: 構造体配列のポインタ

Posted: 2011年6月28日(火) 23:42
by ざこ
SPointerP->image = LoadGraph("selectbox0.png");

で表示されました!!!

自分は全然頭が回ってなかったようです・・・
foxさん、nonさん、本当にありがとうございました!これでまた前に進めます!

Re: 構造体配列のポインタ

Posted: 2011年6月29日(水) 03:20
by ISLe
SPointerPが不定のままのような気がします。
気のせいであれば良いのですが。