我不知道怎么问这个问题,所以我举个例子。我希望你能理解。这是结构节点:
typedef struct NODE {
struct NODE *link;
int data;
} SList;
假设我使用appendList(Node *list, int data);
[you can use your own also] 函数将节点插入到这样的列表中:
int main() {
SList *list1 = NULL;
// append like this: 1, 2, 3
list1 = appendList(list1, 1);
list1 = appendList(list1, 2);
list1 = appendList(list1, 3);
SList *list2 = list1;
// Here starts the confusing part (atleast for me)
int i = 1;
while(i--) {
list1 = list1->link;
}
// Now list1 == list1->link;
list1 = NULL; // This is the point of confusion
printf("%d", list2->link->link->data); // Return 3
}
现在我的问题是,当我分配NULL
给list1->link
after while 循环然后打印list2->link->link->data
导致退出失败的值时,但是当它分配给list1
(在 while 循环之后变为list1->link
)然后printf()
安全地打印该值。为什么?