重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

 こんにちは,シューティングゲームプログラミングという本を読んでいてわからないところがあったので質問させてください.
#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+数字になっているのでしょうか.
 そもそも,(クラス名*)()という形の定義がわかりません.
独学で勉強しててまだ半年ほどしかしていない初心者ですが,よろしくお願いします.

A 回答 (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ポインタで返しています。
    • good
    • 0
この回答へのお礼

 迅速な回答ありがとうございます.
なるほど,(CTask*)はキャストだったのですか.
わかりやすい説明ありがとうございました!

お礼日時:2010/03/25 00:30

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!