ページ 1 / 1
C言語_構造体についての質問です
Posted: 2011年6月04日(土) 21:25
by LisetteLander
構造体で質問なのですが、以下のコードの後半の
calcとgraphとfinalizeという関数に与えられる構造体の内容物はどうなっているのでしょうか?
imageだけ与えられてyは無視され・・・る??
また、それとは別の質問でinitializeのyになぜintが与えれているのでしょうか?
(この質問はこのコードだけでは判断できないものかもしれません)
コード:
typedef struct{
int Image;
int y;
} Player_t;
// 初期化をする
void Player_Initialize( Player_t *Player, int y );
// 動きを計算する
void Player_Calc( Player_t *Player );
// 描画する
void Player_Graph( Player_t Player );
// 終了処理をする
void Player_Finalize( Player_t Player );
http://dixq.net/g/d_05.html
Re: C言語_構造体についての質問です
Posted: 2011年6月04日(土) 21:48
by box
sood さんが書きました:
imageだけ与えられてyは無視され・・・る??
そんなことがあろうはずがありません。
構造体の実体か、構造体を指すポインターか、という違いはあるものの、
Image
y
という2つのメンバーを持つ構造体一切合切を渡していることは間違いありません。
sood さんが書きました:
また、それとは別の質問でinitializeのyになぜintが与えれているのでしょうか?
(この質問はこのコードだけでは判断できないものかもしれません)
その関数の仕様がどうなっているかによります。
Re: C言語_構造体についての質問です
Posted: 2011年6月04日(土) 22:38
by LisetteLander
void Player_...( Player_t *Player );
というのは、関数にPlayer_tという構造体の中の、imageポインタアドレスだけを渡している
と解釈したのですが、そうすると2つ目のメンバのyはどこへいったんだ?と思って質問しました・・・
Re: C言語_構造体についての質問です
Posted: 2011年6月04日(土) 22:48
by h2so5
sood さんが書きました:void Player_...( Player_t *Player );
というのは、関数にPlayer_tという構造体の中の、imageポインタアドレスだけを渡している
と解釈したのですが、そうすると2つ目のメンバのyはどこへいったんだ?と思って質問しました・・・
なぜそのように解釈できたのか教えていただきたいですね。
逆にそのような解釈ができるなら、yが無視されることはないということが分かるはずです。
Re: C言語_構造体についての質問です
Posted: 2011年6月04日(土) 23:36
by box
sood さんが書きました:void Player_...( Player_t *Player );
というのは、関数にPlayer_tという構造体の中の、imageポインタアドレスだけを渡している
と解釈したのですが、そうすると2つ目のメンバのyはどこへいったんだ?と思って質問しました・・・
では、構造体の定義において、
y
Image
という順序(今とは逆)だったら、メンバーyのアドレスだけを渡す、と解釈なさるのですか?
Re: C言語_構造体についての質問です
Posted: 2011年6月04日(土) 23:40
by box
さらにさらに、もしも構造体の定義が
x
y
z
Image
Action
Power
...
と多くのメンバーを含んでいたとしても、xの実体あるいはアドレス『だけ』を渡す、と
解釈なさいますか?
これでは、構造体として渡す意味が『全くない』ですよね。
そこらへんをよく理解していただきたいです。
Re: C言語_構造体についての質問です
Posted: 2011年6月05日(日) 00:00
by さかまき
Player.cppをみれば引数の構造体を実際どう扱っているかがわかりますよ。
Re: C言語_構造体についての質問です
Posted: 2011年6月05日(日) 02:16
by LisetteLander
すいません。Playerという引値がどういうものかがまったくわかりません。。
さきほど考えた答えが
「構造体から関数にメンバを引き渡しているが、関数内で使用していない」
でした。
つまり、
PlayerというのはPlayer_tという構造体が持っているメンバを使う所を決める物??(#difineのような
でもそうすると*がつくというのは・・・
Re: C言語_構造体についての質問です
Posted: 2011年6月05日(日) 02:23
by LisetteLander
でもそうすると初期化関数に構造体からもらったyが使われていないということに・・・
また、この比較演算子のようなインクリメントみたいな記号はなんでしょうか?
->
Re: C言語_構造体についての質問です
Posted: 2011年6月05日(日) 05:43
by hidden
値渡しと参照渡しの違いは大丈夫ですか?
void Player_Graph( Player_t Player );
では変更を行わずに内容がわかればいいので値渡しなのでしょう。
Player_Graph関数内ではPlayer.Imageと書いてImageを利用したりしていませんか?
void Player_Initialize( Player_t *Player, int y );
void Player_Calc( Player_t *Player );
では初期化と座標移動でImageやyを変更するのでしょう。
Player_Initialize関数内ではPlayer_t型へのポインタであるPlayerからImageやyに代入などをおこなっていませんか?
引数のPlayerはポインタでそこからメンバにアクセスするので
(*Player) .Image と書けばImageを指します。これをアロー演算子->を用いて、
Player->Image と書くことができます。大抵はこちらの書き方を利用します。()が多いのは見辛いですからね。
void Player_Initialize( Player_t *Player, int y );
の第二引数int yですがなにに利用されているのかはわかりませんが、
Player_Initialize関数内でもPlayer->yとは別のものです。
Re: C言語_構造体についての質問です
Posted: 2011年6月05日(日) 09:07
by box
ちゃんとした入門書で
・ポインター
・構造体
・構造体メンバーへのアクセス
・アロー演算子
あたりをしっかりマスターしてから
ゲームプログラミングに取り組むことをおすすめします。
何事も土台が大事。
Re: C言語_構造体についての質問です
Posted: 2011年6月06日(月) 08:20
by LisetteLander
ありがとうございます。
アロー演算子をちょっと調べたら理解できました!