作者LPH66 (-6.2598534e+18f)
看板C_and_CPP
標題Re: [問題] 結構和指標定義問題
時間Thu Apr 16 18:02:44 2015
※ 引述《flyaway339 (豪)》之銘言:
: 2.關於前面結構定義的部分為什麼不可以寫成下列形式:
:
: typedef struct{
: char data;
: struct ListNode *nextptr;
: }ListNode;
:
: typedef ListNode *ListNodeptr;
這個定義是將一個
無名 struct (內含這些內容) typedef 為 ListNode 這名字
所以本來就沒有 struct ListNode 這個名字, 自然不給你用
原先的寫法是將
struct ListNode (內含這些內容) typedef 為 ListNode 這名字
因此這時就有 struct ListNode 這個名字
: → a27417332: 我覺得這可能代表你要先看語法書再看這本資料結構 04/16 11:29
: → wvwvwvwvwv: 回答你第二點 依現在的編譯器VS 可以直接 04/16 13:35
: → wvwvwvwvwv: struct ListNode{ 04/16 13:36
: → wvwvwvwvwv: char data; ListNode* nextptr; 04/16 13:36
: → wvwvwvwvwv: }; //以後宣告結構可以直接 ListNode* Node; 04/16 13:37
這是 C++ 才允許的寫法
首先, C++ 所有 class 在指稱時直接稱其名, 不用加上 class 關鍵字
再來, C++ 的 struct 就只是預設 public 的 class 而已
因此 C++ 寫 struct ListNode {...}; 可以單用 ListNode 這名字指稱之
C 不行, 你必須完整寫出 "struct ListNode" 才能指稱之
這才是為什麼會有 typedef struct S {...} S; 這個 idiom 存在
這樣寫定義了一個 struct S (內含這些內容) 並將其 typedef 為 S 這名字
--
LPH [acronym]
= Let Program Heal us
-- New Uncyclopedian Dictionary, Minmei Publishing Co.
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.112.30.32
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1429178567.A.228.html
推 yvb: 先寫 typedef struct ListNode ListNode; 04/16 20:02
→ yvb: 再寫 struct ListNode { char data; ListNode *nextptr; }; 04/16 20:02
推 ohyeah5566: 哦哦 原來! 04/17 12:34