Re: [問題] 程式題,請幫幫忙~>"<

看板Grad-ProbAsk作者 (艾斯寇德)時間15年前 (2009/03/23 00:32), 編輯推噓2(200)
留言2則, 2人參與, 最新討論串2/2 (看更多)
※ 引述《nana0130 (小那)》之銘言: : 要寫出這個程式的output : 但是我打進電腦,一直有錯,我debug不出來,只好用腦子想....... : 有些地方打結了,不太懂。 : #include <stdio.h> : #include <stdlib.h> : typedef struct node{ : char ch; : struct node *link; : } node_t, *list_t; : void tupni (list_t *ptr, const char *s){ : if(*s) { : node_t *p = malloc(sizeof(node_t)); 如果你是以c++來編譯,錯誤訊息應該是 無法將型別void*轉為node_t* 這是C語言的配置記憶體方法,在C90之前的應該都可以過 在C++編譯器應該要做個轉換型別(node_t*) : p->ch = *s; : printf("%s",s); //這個應該是 abcd 這會依序印出 abcd bcd cd d (沒有空白) : tunpi(&p->link, s+1); // &p->link 不懂,p的位址的link是什麼? 你翻譯錯了,這是p->link的位址,也就是該link存在記憶體的位址 這個函式的動作目前是遞迴地將字串的各個字元assign給 新生節點,相當於將一字串拆解成linked list : printf("%c",p->ch); s+1也不懂,s指向下一筆char資料,可是 s+1的確是為了讓s移到下一個char,這是為了讓遞迴式可以前進,直到 碰到結束條件,結束條件就是*s == 0,而C string的結尾為\0 這裡會因為runtime stack pop 的關係,印出反過來的字串 並且使一ptr的link(目前的ptr) 為新生節點 所以list會是(a)->(b)->(c)->(d) 輸出是abcdbcdcdddcba : *ptr = p; 除了abcd還有什麼下一筆??? : } : else : *ptr = NULL; : } : int main(void) { : list_t p =NULL; : tupni(&p, "abcd"); : /* draw the list p */ : } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.227.232.156 ※ 編輯: sunneo 來自: 61.227.232.156 (03/23 00:33) ※ 編輯: sunneo 來自: 61.227.232.156 (03/23 00:37)

03/23 11:41, , 1F
感謝你Q Q
03/23 11:41, 1F

03/24 21:16, , 2F
高手應該是正解!!!...至少跟我的依樣 :PY
03/24 21:16, 2F
文章代碼(AID): #19ncW5Kj (Grad-ProbAsk)
文章代碼(AID): #19ncW5Kj (Grad-ProbAsk)