• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:typedefについてご質問お願いします。)

typedefについての質問

このQ&Aのポイント
  • typedef LISTNODE *LISTNODEPTRとは何を意味しているのか
  • 上記プログラムでのNULLポインタの扱いについて教えてください

質問者が選んだベストアンサー

  • ベストアンサー
  • toysmith
  • ベストアンサー率37% (570/1525)
回答No.1

typedefだからと言って構えて考える必要はありません。 typedefは単なる記憶クラスですからtypdefの無い構文の解釈がわかっていれば「宣言されるのが変数であるか型であるか」の違いでしかありません。 質問1 char *p; この構文は「char型のメモリ領域のアドレスを格納可能なpを宣言」であり、pは「charへのポインタ」と表現されることが多いと思います。 同様に LISTNODE *listnodeptr; この構文は「LISTNODEへのポインタlistnodeptr」です。 これをtypedef記憶クラス付きで宣言すると typedef LISTNODE *LISTNODEPTR ; 「LISTNODEへのポインタ型であるLISTNODEPTR」を宣言します。 質問2 LISTNODEPTRが「ポインタ型」であることが理解できれば LISTNODEPTR startPtr = NULL ; この宣言が「LISTNODEPTR型(LISTNODEへのポインタ型)のstartPtr」を宣言していることがわかると思います。 そして、NULLで初期化されるのはstartPtr(ポインタ変数)です。 LISTNODEPTR startPtr ; この宣言ではポインタ変数だけが宣言されており、ポインタが指す領域は決定していません。 よって、 LISTNODEPTR startPtr = NULL ; この構文で「ポインタが指す領域」を初期化することは出来ません。 構文解釈としては char *p = NULL ; この構文と同じです。

takahiro
質問者

お礼

ご回答ありがとうございます。初心者の僕にも気持ちよく分かりやすい内容でした。友達になって今後もずっとお知り合いになりたいくらいです(^^;ほんとうにありがとうございました。また何かあればよろしくお願いいたします。失礼します。

関連するQ&A