[問題] 關於linked list 和typedef宣告

看板C_and_CPP作者 (mozzan)時間12年前 (2011/11/12 00:01), 編輯推噓4(4020)
留言24則, 6人參與, 最新討論串1/1
(課本的程式) 1. typedef struct listnode *listpointer; 2. typedef struct listnode{ 3. int data; 4. listpointer link; 5. }; 主要是這一段宣告不是很懂, 1. typedef int aaa 的用法是將aaa當成int這個型態來使用, 同時也可以用aaa來宣告其他變數(是吧!?),那我有問題的 是第一行,我一直沒辦法理解這一行的意思。 2. 第四行的link 為何不用加上"*" ?? 感謝各位幫忙! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.118.222.38

11/12 00:02, , 1F
第一行要解讀成 typedef struct listnode * listpointer;
11/12 00:02, 1F

11/12 00:03, , 2F
listpointer 是它的名,型態是一個listnode的指標
11/12 00:03, 2F

11/12 00:03, , 3F
因為listpointer是指標?
11/12 00:03, 3F

11/12 00:04, , 4F
所以第四行等價於 listnode * link;
11/12 00:04, 4F

11/12 00:04, , 5F
對,它就定義成一個指標的型態
11/12 00:04, 5F

11/12 00:10, , 6F
那我之後若宣告一變數為 listpointer p1; 那p1是一個指標
11/12 00:10, 6F

11/12 00:10, , 7F
就跟 struct listnode * pl; 是一樣的意思
11/12 00:10, 7F

11/12 00:11, , 8F
型態變數,而且他包含著data變數和一個指向listpointer
11/12 00:11, 8F

11/12 00:13, , 9F
結構的指標??
11/12 00:13, 9F

11/12 00:16, , 10F
喔不,p1就是一個指向一個listnode的指標,就只是指標
11/12 00:16, 10F

11/12 00:16, , 11F
就像 int * a; a並沒有存int的功能,而是指向另一個int
11/12 00:16, 11F

11/12 00:47, , 12F
我指的不是在struct 內宣告listpointer p1; 而是在之後宣告
11/12 00:47, 12F

11/12 00:48, , 13F
listpointer p1; 如果這等於struct listnode *p1的話,是不
11/12 00:48, 13F

11/12 00:48, , 14F
如果你只是寫 listpointer p1; 它就只是一個指標
11/12 00:48, 14F

11/12 00:49, , 15F
你說它還包含著其他東西,這種說法就會不正確
11/12 00:49, 15F

11/12 00:49, , 16F
是呢?
11/12 00:49, 16F

11/12 02:20, , 17F
不管在哪裡寫 listpointer p1; 都等同 struct listnode *p1;
11/12 02:20, 17F

11/13 18:00, , 18F
那再請問,程式的第一行可否解讀成listpointer 是一個指向
11/13 18:00, 18F

11/13 18:01, , 19F
listnode 這個結構的指標?? 謝謝
11/13 18:01, 19F

11/13 18:05, , 20F
不行,去弄清楚 typedef 實際意義,它只是重定一個資料型
11/13 18:05, 20F

11/13 18:05, , 21F
態,而不會因此產生一個資料型態(或物件).
11/13 18:05, 21F

11/13 19:38, , 22F
所以"listpointer"指的是'指向listnode結構的指標型態'?
11/13 19:38, 22F

11/13 19:39, , 23F
沒錯,它就只是一種型態
11/13 19:39, 23F

11/13 19:47, , 24F
謝謝各位解答
11/13 19:47, 24F
文章代碼(AID): #1ElKR1SX (C_and_CPP)