C言語_構造体についての質問です

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

C言語_構造体についての質問です

#1

投稿記事 by LisetteLander » 14年前

構造体で質問なのですが、以下のコードの後半の
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

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

Re: C言語_構造体についての質問です

#2

投稿記事 by box » 14年前

sood さんが書きました: imageだけ与えられてyは無視され・・・る??
そんなことがあろうはずがありません。
構造体の実体か、構造体を指すポインターか、という違いはあるものの、
Image
y
という2つのメンバーを持つ構造体一切合切を渡していることは間違いありません。
sood さんが書きました: また、それとは別の質問でinitializeのyになぜintが与えれているのでしょうか?
(この質問はこのコードだけでは判断できないものかもしれません)
その関数の仕様がどうなっているかによります。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

LisetteLander

Re: C言語_構造体についての質問です

#3

投稿記事 by LisetteLander » 14年前

void Player_...( Player_t *Player );
というのは、関数にPlayer_tという構造体の中の、imageポインタアドレスだけを渡している
と解釈したのですが、そうすると2つ目のメンバのyはどこへいったんだ?と思って質問しました・・・

アバター
h2so5
副管理人
記事: 2212
登録日時: 14年前
住所: 東京
連絡を取る:

Re: C言語_構造体についての質問です

#4

投稿記事 by h2so5 » 14年前

sood さんが書きました:void Player_...( Player_t *Player );
というのは、関数にPlayer_tという構造体の中の、imageポインタアドレスだけを渡している
と解釈したのですが、そうすると2つ目のメンバのyはどこへいったんだ?と思って質問しました・・・
なぜそのように解釈できたのか教えていただきたいですね。
逆にそのような解釈ができるなら、yが無視されることはないということが分かるはずです。

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

Re: C言語_構造体についての質問です

#5

投稿記事 by box » 14年前

sood さんが書きました:void Player_...( Player_t *Player );
というのは、関数にPlayer_tという構造体の中の、imageポインタアドレスだけを渡している
と解釈したのですが、そうすると2つ目のメンバのyはどこへいったんだ?と思って質問しました・・・
では、構造体の定義において、
y
Image
という順序(今とは逆)だったら、メンバーyのアドレスだけを渡す、と解釈なさるのですか?
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

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

Re: C言語_構造体についての質問です

#6

投稿記事 by box » 14年前

さらにさらに、もしも構造体の定義が

x
y
z
Image
Action
Power
...

と多くのメンバーを含んでいたとしても、xの実体あるいはアドレス『だけ』を渡す、と
解釈なさいますか?
これでは、構造体として渡す意味が『全くない』ですよね。
そこらへんをよく理解していただきたいです。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

アバター
さかまき
記事: 92
登録日時: 14年前

Re: C言語_構造体についての質問です

#7

投稿記事 by さかまき » 14年前

Player.cppをみれば引数の構造体を実際どう扱っているかがわかりますよ。

LisetteLander

Re: C言語_構造体についての質問です

#8

投稿記事 by LisetteLander » 14年前

すいません。Playerという引値がどういうものかがまったくわかりません。。

さきほど考えた答えが
「構造体から関数にメンバを引き渡しているが、関数内で使用していない」
でした。
つまり、
PlayerというのはPlayer_tという構造体が持っているメンバを使う所を決める物??(#difineのような
でもそうすると*がつくというのは・・・

LisetteLander

Re: C言語_構造体についての質問です

#9

投稿記事 by LisetteLander » 14年前

でもそうすると初期化関数に構造体からもらったyが使われていないということに・・・

また、この比較演算子のようなインクリメントみたいな記号はなんでしょうか?
->

hidden

Re: C言語_構造体についての質問です

#10

投稿記事 by hidden » 14年前

値渡しと参照渡しの違いは大丈夫ですか?

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とは別のものです。

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

Re: C言語_構造体についての質問です

#11

投稿記事 by box » 14年前

ちゃんとした入門書で
 ・ポインター
 ・構造体
 ・構造体メンバーへのアクセス
 ・アロー演算子
あたりをしっかりマスターしてから
ゲームプログラミングに取り組むことをおすすめします。
何事も土台が大事。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

LisetteLander

Re: C言語_構造体についての質問です

#12

投稿記事 by LisetteLander » 14年前

ありがとうございます。
アロー演算子をちょっと調べたら理解できました!

閉鎖

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