此代码应该打印:' tree two one' 但它不起作用。 (new_nod没有添加到mylist的前面) 谁知道为什么? (实际上在这段代码中我想使用一个函数,指针指向另一个函数中的指针输入,但它没有工作(没有应用于mylist的更改)。 但是当我在main中直接使用add_front函数时它会起作用。
#include <stdio.h>
#include <stdlib.h>
struct node{
char *word;
struct node *next;
};
struct node* create_node(char *str){
struct node *s;
s = (struct node *)malloc(sizeof(struct node));
if(s==NULL){
printf("couldn't malloc :(\n");
exit(-1);
}
s->word = str;
s->next = NULL;
return s;
}
void print_node(struct node *list){
struct node *current;
for(current = list; current !=NULL; current = current->next)
printf("%s ", current->word);
}
void add_front(struct node **list, struct node *new_node){
new_node->next= *list;
*list = new_node;}
void func(struct node*list, struct node*new_node){
add_front(&list, new_node);
}
int main()
{
struct node* mylist = create_node("one");
mylist->next = create_node("two");
struct node *new_node = create_node("tree");
func(mylist, new_node);
print_node(mylist);
}
答案 0 :(得分:1)
你的add_front
接受一个指向指针的指针而不是错过了对NULL的检查是非常好的。但是,让我们来看看这个:
void func(struct node*list, struct node*new_node){
add_front(&list, new_node);
}
add_front
在这里修改什么?本地指针list
。这只是mylist
中main
的副本。
所以你还没有改变mylist
所指向的内容。