関数の引数としてのポインタ

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

関数の引数としてのポインタ

#1

投稿記事 by surach » 2年前

DXライブラリを使って自機を動かすプログラムを作っています。DXライブラリを新プログラミングの館で勉強し始めたばかりの初心者です。自機の座標を関数内で変更したかったのでポインタを使って、引数を渡したんですが、[引数を引き渡す時に"int" の引数は型 "int *" のパラメーターと互換性がありません]、[int play(int *,int *)': 引数1を'int'から'int*'へ変換できません]
などのエラーが出てきて困ってます。原因がわかる人はいませんか?またいい方法はありますか?よろしくお願いいたします(*- -)(*_ _)ペコリ

コード:

 
#include "DxLib.h"

int Key[256]; // キーが押されているフレーム数を格納する
			  //Process関数 裏画面を表画面に反映, メッセージ処理, 画面クリア,キー更新の順番で行う
int Process() {
	if (ScreenFlip() != 0)return -1;
	if (ProcessMessage() != 0)return -1;
	if (ClearDrawScreen() != 0)return -1;

	char tmpKey[256]; // 現在のキーの入力状態を格納する
	GetHitKeyStateAll(tmpKey); // 全てのキーの入力状態を得る
	for (int i = 0; i<256; i++) {
		if (tmpKey[i] != 0) { // i番のキーコードに対応するキーが押されていたら
			Key[i]++;     // 加算
		}
		else {              // 押されていなければ
			Key[i] = 0;   // 0にする
		}
	}
	return 0;
}

int player; //自機

//自機を動かす関数
int play(int *px, int *py) {
	if (Key[KEY_INPUT_LEFT] >= 1) *px--;
	if (Key[KEY_INPUT_RIGHT] >= 1) *px++;
	if (Key[KEY_INPUT_UP] >= 1) *py--;
	if (Key[KEY_INPUT_DOWN] >= 1) *py++;

	DrawGraph(*px * 32, *py * 32, player, FALSE);
	WaitTimer(80);

}


int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) {
	ChangeWindowMode(TRUE), DxLib_Init(), SetDrawScreen(DX_SCREEN_BACK); //ウィンドウモード変更と初期化と裏画面設定
	int px = 1, py = 1; //自機の座標

	player = LoadGraph("player1.png");

	while (Process() == 0) {
		play(px, py);
	}

	DxLib_End(); // DXライブラリ終了処理
	return 0;
}

アバター
usao
記事: 1564
登録日時: 6年前

Re: 関数の引数としてのポインタ

#2

投稿記事 by usao » 2年前

>原因
エラーメッセージの通りでしょう

>いい方法
ポインタを使うなら,ポインタ周りの文法を先に学ぶと良いでしょう.
例えば,46行目を

コード:

play( &px, &py);
とすることで何かが進展するようなら,その理由を調べてみてはいかがでしょうか.

surach
記事: 21
登録日時: 2年前

Re: 関数の引数としてのポインタ

#3

投稿記事 by surach » 2年前

usaoさんありがとうございました。(*- -)(*_ _)ペコリ
ご指摘のところを直したらエラー治りました!
実引数を渡すときアドレスで渡してないのが原因でしたね!助かりました!

返信

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