引数とポインターについて

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
wing
記事: 18
登録日時: 14年前

引数とポインターについて

#1

投稿記事 by wing » 14年前

いつもお世話になっています。
以前作ったゲームをC++のクラスを使って書き換えています。
必要と思われる部分を抜粋します。

コード:

enum GAMESTATE{
     GAME_START, GAME_TYUUSEN, GAME_MAIN
};
//main.cpp
         GAMESTATE game_state;
         game_state = GAME_START;
//=====メインループ====================================
	while(ProcessLoop() == 0){
		switch(game_state){
			case GAME_START:
				if(CheckHitKey(KEY_INPUT_RETURN) == 1)
					game_state = GAME_TYUUSEN;
				break;
			case GAME_TYUUSEN:
				gameStage.Set_startCounter(0);
				gameStage.tyuusen();

				game_state = GAME_MAIN;
				break;
			case GAME_MAIN:
				gameStage.game_main(&game_state);
				
				break;
		}
		......
//gameStage.h
class CGameStage{
	....
	CFish_naka fish_naka[10];
	....
};
//gameStage.cpp
void CGameStage::game_main(GAMESTATE *game_state){
	startCounter++;
	Move(game_state);
	....
}
void CGameStage::Move(GAMESTATE *game_state){
	fish_naka->Move_fish_naka(*&game_state....);
	....
}
//fish.cpp
void CFish_naka::Move_fish_naka(GAMESTATE *game_state,......){
	....
	*game_state = GAME_TYUUSEN;
}
fish.cppの *game_stat = GAME_TYUUSEN;をmain.cppに反映させようと
試行錯誤した結果、エラーも出ずに思った結果になりました。
うまくいったのは偶然で、gameStage.cppの
void CGameStage::Move(GAMESTATE *game_state){
___fish_naka->Move_fish_naka(*&game_state....);
___....
}
の部分で、*&game_state としてしまったからです。
質問は、*& このような書き方は間違っていないでしょうか?
Dxライブラリ、VC2008EEを使っています。
どなたかよろしくお願いします。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: 引数とポインターについて

#2

投稿記事 by softya(ソフト屋) » 14年前

少なくともC++な書き方ではなく、C言語的なポインタによる参照渡しの手法です。
&game_stateはgame_stateのポインタ値を意味します。
あと、*&game_stateとか意味のない書き方をしていますが、
fish_naka->Move_fish_naka(game_state....);
とやっても同じです。
GAMESTATE *

GAMESTATE
を混同して扱っているのが原因だと思いますよ。
自信がないならポインタを再度ちゃんと勉強されたほうが良いかと思います。

ちゃんとC++的に書きたければ、&による参照渡しを使った方が良いでしょう。
呼び出し。
gameStage.game_main(game_state);
受け側
void CGameStage::game_main(GAMESTATE &game_state){
と書きます。
ポインタ演算の&とは意味が違うので注意してください。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

wing
記事: 18
登録日時: 14年前

Re: 引数とポインターについて

#3

投稿記事 by wing » 14年前

softyaさん。
fish_naka->Move_fish_naka(game_state....);
で、うまくいきました。
ありがとうございました。

ポインタ、参照渡しをもっと勉強してみます。

閉鎖

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