楼主:
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; };