
こんにちは,シューティングゲームプログラミングという本を読んでいてわからないところがあったので質問させてください.
#define TASK(INDEX) ((CTask*)(buf+max_task_size*(INDEX)))
この1行がよくわかりません.
これは CTaskList というクラスのコンストラクタにかいてあります.同じところに max_task_sizeの初期化もあります.
また,同じところに
char* buf=new char[max_task_size*(max_num_task+2)];
と書いてあります.
CTaskというのはクラス(コンストラクタにCTaskListを引数にとる)です.max_num_taskというのはCtaskListのコンストラクタ内で初期化されてます.
このマクロで定義したTASK()は CTaskクラスのポインタの初期化に使われていると思うのですが,マクロの文法がよくわかりません.詳しく教えていただきたいです.
主な疑問 INDEXというのは引数で後のINDEXはその数字になるという解釈でいいのですか.
bufというのはchar配列のポインタだと思うのですが,なんでbuf+数字になっているのでしょうか.
そもそも,(クラス名*)()という形の定義がわかりません.
独学で勉強しててまだ半年ほどしかしていない初心者ですが,よろしくお願いします.
No.1ベストアンサー
- 回答日時:
bufは、new char[max_task_size*(max_num_task+2)]で確保された配列領域の先頭アドレスを保持しています。
buf+max_task_size*(INDEX)は、アドレスの計算で、bufで示す先頭アドレスにmax_task_size*(INDEX)だけ足したアドレスを示します。
(CTask*)は、キャスト(型変換)で、計算したアドレスをCTaskポインタに変換して返しています。
結果としてTASK(INDEX)はbufに確保した領域の中でINDEX番目のタスクの領域をCTaskポインタで返しています。
迅速な回答ありがとうございます.
なるほど,(CTask*)はキャストだったのですか.
わかりやすい説明ありがとうございました!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語初心者 ポインタについて、お助けください、、 2 2023/03/15 23:50
- C言語・C++・C# C言語:数値の桁数指定についての質問です。 8 2022/05/26 23:53
- その他(プログラミング・Web制作) このプログラミングをどう組みますか? Googlecolabでやってるんですが、出来る方お願いします 1 2022/07/13 10:52
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
- その他(プログラミング・Web制作) どういうプログラムで組みますか?google colabでやってるんですけど、出来る方お願いします。 1 2022/07/17 18:41
- Visual Basic(VBA) 複数csvを横に追加していくマクロについて 2 2023/04/25 09:19
- C言語・C++・C# C言語初心者 構造体 課題について 2 2023/03/10 19:48
- C言語・C++・C# C言語で再起関数とポインタを用いて文字列反転をする方法がわかりません。 4 2023/04/29 20:32
- その他(プログラミング・Web制作) どういうプログラムで組みますか?google colabでやってるんですけど、出来る方お願いします。 1 2022/07/06 09:28
- Excel(エクセル) 2つのVBAを一緒にしたら機能しなくなりました(エクセル) 7 2022/06/02 12:41
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
セグメントエラー
-
C言語のポインタに直接アドレス...
-
init関数の意味
-
Run-Time Check Failure #3とい...
-
戻り値で構造体を返すことは可...
-
ExcelVBAでのkernel32(64bit)
-
アプリを32bitから64bit移行
-
参照型で受け取った引数をポイ...
-
fopne で失敗する原因
-
PASCALとFARの意味
-
LPSTR型の初期化について
-
CWnd::EnableWindow()の扱い方
-
ポインタについて
-
プーさんのマウスポインタを教...
-
連結リスト 要素の入れ替え
-
ハンドルはポインタか
-
C++で関数ポインタから関数名を...
-
自作DLLの引数について、ポイン...
-
NULLポインタが0でない処理系と...
-
TCHAR文字列内の検索について
おすすめ情報