• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:DXライブラリ:ポインタと配列?)

C言語とDXライブラリを利用したゲーム作成におけるポインタと配列の扱い方

このQ&Aのポイント
  • 初心者の方がC言語とDXライブラリを利用してゲームを作成している際に、GetMousePoint関数を利用してマウスの座標情報を配列に格納したいと考えています。しかし、ポインタと配列の扱い方について困っています。
  • 最初はアドレスを格納してしまったためにフリーズしてしまいましたが、ポインタを利用して配列に値を格納する方法を調べ、修正しました。しかし、再度フリーズが発生しました。また、ポインタの指すアドレスの中にある数値の取り出し方も理解できていません。
  • 一方、別の箇所でポインタの中身を利用して処理を行っている部分は問題なく動作しています。これはなぜでしょうか?【1】【2】【3】の処理についてアドバイスをいただきたいです。

質問者が選んだベストアンサー

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.2

static int x,y なら GetMousePoint(&x,&y); zahyoux[i] = x; zahyouy[i] = y; でいいはずですが。 // static である必要はあるのか? とか // zahyou[i] の宣言は? zahyoux[i] の間違い ? とか // struct point {int x;int y} zahyou[20] とかの方がいいのでは? とか ここでフリーズしているわけでは無いと思います。 これが原因だとしても、実際にフリーズするのは別の場所では? 例えば、このzahyouを使って何かを表示している箇所とか。 > GetMousePoint(&x,&y); > int *a = &x; > zahyou[i] = *a; これは GetMousePoint(&x,&y); zahyou[i] = x; とまったく同じです。 int *a = &x; で aはxへのアドレスとなり zahyou[i] = *a; で、 *a→(xへのアドレス)の実体→ xの実体 となるからです。 > (x = x-230)/=40; > x = x*40+250; ポインタはまったく関係ありません。 ただの数値演算です ところで (x = x-230)/=40; は意図してこうしたのですか? C++では間違いでは無いのですが...

mitara42k
質問者

お礼

配列の[i]部分で問題が生じているようでした。 zahyoux[i]の[i]部分に数字を入れればきちんと動作するのですが、そこに変数を入れるとフリーズしてしまうみたいです。 iには初期値0が与えられているのですが。 とりあえず、もう少し弄くってみたいと思います。 丁寧にありがとうございました。

mitara42k
質問者

補足

ううん。【1】でよかったとは思いませんでした。別の箇所なんですかね。Staticである必要はあります。補足で書いてあるプログラムは一部で、別の関数でもそれらを使用する予定、あるいはしている状態だからです。 >これは >GetMousePoint(&x,&y); >zahyou[i] = x; >とまったく同じです。 structは構造体の宣言でしたね。そういえばそんなものもありました。頭から抜け落ちてました。 【1】と【2】が同じとは、有難い助言です。 正直、何が何やら、で頭が沸騰していましたので。 >(x = x-230)/=40; >は意図してこうしたのですか? >C++では間違いでは無いのですが... 意図して書いてはいるんですが、改めてみると何かおかしいですね? C言語のみ利用しているつもりですので、直した方がいいんでしょうか。 問題なのは、 >ここでフリーズしているわけでは無いと思います。 >これが原因だとしても、実際にフリーズするのは別の場所では? >例えば、このzahyouを使って何かを表示している箇所とか。 ここでしか、このコードが書かれていない事なんです。 ちなみに実験的に動くかどうか、を試しで入れてみたので、別の場所で全く利用していません。 何かアホなミスをしているんでしょうか・・・。 前回は == を入れる所を = にしてしまっていて、半日悩みましたorz

その他の回答 (2)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.3

群盲象をなでる状態になりそうな気がするので, 可能ならそのような問題を生じる短いプログラムを出した方がいいんじゃないでしょうか.

mitara42k
質問者

お礼

家に戻ったので色々とやってみた所、ポインタではなく配列の方で問題が生じているようでした。 ありがとうございました。

  • wormhole
  • ベストアンサー率28% (1626/5665)
回答No.1

x,y,zahyouの型はなんですか? >zahyou[i] = x; iの値は問題ありませんか?

mitara42k
質問者

お礼

とりあえず、問題の箇所が判明しまして、アドバイスをいただけました。 ありがとうございました。

mitara42k
質問者

補足

それぞれ、 static int x,y; static int zahyou[20]; static int i=0; で宣言されています。 正確に書くならば、 static int x.y; static int zahyoux[20],zahyouy[20]; static int i=0; /*** ここから ***/ GetMousePoint(&x,&y); int *a = &x; int *b = &y; zahyou[i] = *a; //ここと zahyou[i] = *b; //ここ i++; if (i == 20) i=0; /*** ここまでの処理をマウスが離されたかどうか、を変数fと、GetMouseInput関数を利用して繰り返しています ***/ 右側にコメントを入れてある配列の箇所を除けば、問題なく動くことは確認してあります。きちんと座標も得られているようです。 単純にポインタの知識が不足しているものだと思っているのですが、違うのでしょうか。

関連するQ&A