作者sunneo (艾斯寇德)
看板Grad-ProbAsk
标题Re: [问题] 程式题,请帮帮忙~>"<
时间Mon Mar 23 00:32:02 2009
※ 引述《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)
1F:推 nana0130:感谢你Q Q 03/23 11:41
2F:推 pabeni:高手应该是正解!!!...至少跟我的依样 :PY 03/24 21:16