- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:typedefについてご質問お願いします。)
typedefについての質問
このQ&Aのポイント
- typedef LISTNODE *LISTNODEPTRとは何を意味しているのか
- 上記プログラムでのNULLポインタの扱いについて教えてください
- みんなの回答 (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 ; この構文と同じです。
お礼
ご回答ありがとうございます。初心者の僕にも気持ちよく分かりやすい内容でした。友達になって今後もずっとお知り合いになりたいくらいです(^^;ほんとうにありがとうございました。また何かあればよろしくお願いいたします。失礼します。