我尝试编写一个代码来读取几次链表而不调用特定函数,例如void print(t_list *list)
,请参见下面的代码。我可以弄清楚为什么我的代码无法在 while 上下文中第二次读取我的链表,因为在我的第一个循环结束时,我的 structt_list
是NULL
,而当我开始第二次时,我的 struct 仍然是NULL
,显然什么都不能使用。
所以我有两个问题,
第一个:为什么当我通过函数时我可以读取两次我的链表void print(t_list *list)
,这很好,因为这是工作,但我不明白为什么在第二次读取时我t_list
不是NULL
第二:如何在while
orfor
上下文中,将我的指针倒回t_list
开始,再次读取链表。
#include <stdlib.h>
#include <stdio.h>
typedef struct s_list t_list;
struct s_list {
int arg;
t_list *next;
};
int add(t_list **ref, int arg) {
t_list *temp;
temp = NULL;
if(!(temp = (t_list*)malloc(sizeof(t_list))))
return (0);
temp->arg = arg;
temp->next = (*ref);
(*ref) = temp;
return(1);
}
void change(t_list *list) {
printf("change arg:\n");
while(list) {
list->arg = 42;
list = list->next;
}
}
void print(t_list *list) {
printf("list:\n");
while(list) {
printf("arg: %i\n",list->arg);
list = list->next;
}
}
int main() {
t_list *list;
list = NULL;
add(&list, 0);
add(&list, 1);
add(&list, 2);
print(list); // work fine
change(list);
print(list); // work fine it's possible te read a second time but why ?
// that's way don't work a second time
while(list) {
printf("arg: %i\n",list->arg);
list = list->next;
}
while(list) {
printf("arg: %i\n",list->arg);
list = list->next;
}
return (0);
}
安慰
➜ LINKED_LIST git:(master) ✗ clang linked_list.c && ./a.out
print list:
arg: 2
arg: 1
arg: 0
change arg:
print list:
arg: 42
arg: 42
arg: 42
while arg: 42
while arg: 42
while arg: 42