我有一个链表,最后一个节点指向 NULL,还有一个函数通过在 while 循环中遍历列表来打印元素。我会上传我的源代码,但它很长,所以我会简化它。
struct xrec{
*some elements*
struct xrec *next;
};
typedef struct xrec EMPLOYEE;
void listEmployee(EMPLOYEE * list){ // list is head node
int i = 0;
while (list != NULL){
printf(*%d. print elements..*, i+1);
list = list->next; // point to next structure
i++;
}
}
我可以根据需要多次调用该函数,因为我将它设置在 do-while 循环中的 switch 语句中。但是在第一次调用之后,我的头节点不会指向 NULL 吗?因此,我永远无法再次打印出这些元素,对吗?但每当我调用该函数时,情况并非如此;它总是回到第一个节点。这是为什么?我非常确定在调用该函数后我永远不会将列表重定向回第一个节点。
最佳答案
函数的参数是它的局部变量。也就是说,它们(它们的值)是参数的副本。所以在这个声明中
void listEmployee(EMPLOYEE * list);
list 是函数的局部变量。函数内参数的任何更改都不会影响函数调用的参数(及其值)。
你可以想象函数调用如下
EMPLOYEE * head;
//...
listEmployee( head );
//...
void listEmployee( /* EMPLOYEE * list */ )
{
EMPLOYEE * list = head;
//...
所以在函数内,它的局部变量
list
将被改变。 head
将保持不变,因为它没有在函数中使用。关于c - 为什么我可以在c中多次遍历我的链表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31927853/