【发布时间】:2016-02-19 09:14:58
【问题描述】:
这个简单的代码(将元素添加到链表并打印出来)工作正常
#include <stdio.h>
struct node{
int item;
struct node* next;
};
void print_node (struct node* n){
while (n!= NULL){
printf("%d ", (*n).item);
n = n->next;
}
printf("\n");
}
void append_node(struct node *list, struct node *n){
while(list->next != NULL)
list = list->next;
list->next = n;
}
int main(){
struct node n1, n2;
n1.item = 1;
n1.next = NULL;
n2.item = 2;
n2.next = NULL;
print_node(&n1);
print_node(&n2);
append_node(&n1,&n2);
print_node(&n1);
printf("done\n");
return 0;
}
如果我将 append_node 定义如下
void append_node(struct node *list, struct node n){
while(list->next != NULL)
list = list->next;
list->next = &n;
}
并在主程序中相应地调用它(即 append_node(&n1, n2) )运行程序时出现分段错误。我不明白为什么:)
【问题讨论】:
-
struct node n是局部变量。在函数外部范围内无效。 -
在这个标签中询问的 LL 问题中至少有一半具有相同的“本地变量”问题:(
-
Ops,对不起,可能我没有搜索正确的关键字...顺便说一句,这主要是 java 的错。 ;)
标签: c linked-list