让我们跟踪您的代码。
List *l, *l1 = NULL;
定义了两个类型的指针变量List
。
for (int i = 0; i < n; i++) {
您正在开始一个循环,它将遍历n
时间。这意味着,如果您使用 调用此函数5
,则此循环将执行 5 次。
l = malloc(sizeof(List));
在内存中创建一个List
值,并将该值的位置存储在l
指针变量中。每次通过循环时,List
都会在内存中创建一个不同的值。
l->val = n-i;
为新创建的值n-i
的字段分配一个值。对于第一次通过循环,将是,因此将包含 5-0,即 5。对于第二次通过,是 1,因此对于第二次,将包含 5-1,即 4,依此类推.val
List
i
0
val
i
List
val
l->next = l1;
类型中有一个next
字段List
,它是同类型的指针。对于第一遍,li
包含 NULL,因此它将指向 null。对于第二次传递,l1
将包含先前创建的List
值,因此第二次List
的next
字段将指向它,依此类推。
l1 = l;
存储新创建的元素的内存地址,以便在下一次循环中使用。
乍看上去:
在循环的第一遍之后(i = 0) -
5->NULL
在第二遍(i = 1)之后,
4 -> 5 -> NULL
在第三个(i = 2)之后,
3 -> 4 -> 5 -> NULL
在第四个(i = 3)之后,
2 -> 3 -> 4 -> 5 -> NULL
在第五个(也是最后一个)(i = 4)之后,
1 -> 2 -> 3 -> 4 -> 5 -> NULL