Re: [問題] 程式題,請幫幫忙~>"<
※ 引述《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
03/23 11:41, 1F
推
03/24 21:16, , 2F
03/24 21:16, 2F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):