構造体配列のポインタ

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ざこ

構造体配列のポインタ

#1

投稿記事 by ざこ » 14年前

初歩的な質問ですいません・
構造体を配列にいれて、ポインタを用いて表示したいです。

//構造体の宣言
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に何も格納されていないようです。

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

box
記事: 2002
登録日時: 15年前

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

#2

投稿記事 by box » 14年前

ざこ さんが書きました:

コード:

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

コード:

//描画(とりあえずSPointer[0]だけ)
DrawGraph(0, 0, SPointerP->image, TRUE);
こんなことをしてはいけません。
コメントにある「(とりあえずSPointer[0]だけ)」というのは幻想に過ぎません。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

non
記事: 1097
登録日時: 15年前

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

#3

投稿記事 by non » 14年前

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

ざこ

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

#4

投稿記事 by ざこ » 14年前

返信ありがとうございます。
すいません、ポインタの値は設定していましたが、入力し忘れてしまいました。
ぼーっとしていて申し訳ないです。

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といった具合に格納されはいるのですか?

アバター
bitter_fox
記事: 607
登録日時: 15年前
住所: 大阪府

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

#5

投稿記事 by bitter_fox » 14年前

ざこ さんが書きました: 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: 構造体配列のポインタ

#6

投稿記事 by ざこ » 14年前

SPointerP->image = LoadGraph("selectbox0.png");

で表示されました!!!

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

ISLe
記事: 2650
登録日時: 15年前
連絡を取る:

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

#7

投稿記事 by ISLe » 14年前

SPointerPが不定のままのような気がします。
気のせいであれば良いのですが。

閉鎖

“C言語何でも質問掲示板” へ戻る