Re: [問題] 結構和指標定義問題

作者: LPH66 (-6.2598534e+18f)   2015-04-16 18:02:44
※ 引述《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 這名字
作者: yvb   2015-04-16 20:02:00
先寫 typedef struct ListNode ListNode;再寫 struct ListNode { char data; ListNode *nextptr; };
作者: ohyeah5566 (歐耶)   2015-04-17 12:34:00
哦哦 原來!

Links booklink

Contact Us: admin [ a t ] ucptt.com