不能使用带指针指针的函数。在另一个函数中输入。用C语言

时间:2017-01-10 12:51:28

标签: c linked-list

此代码应该打印:' 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);
}

1 个答案:

答案 0 :(得分:1)

你的add_front接受一个指向指针的指针而不是错过了对NULL的检查是非常好的。但是,让我们来看看这个:

void func(struct node*list, struct node*new_node){
  add_front(&list, new_node);
}

add_front在这里修改什么?本地指针list。这只是mylistmain的副本。

所以你还没有改变mylist所指向的内容。