gpt4 book ai didi

c - 为什么我可以在 c 中多次遍历我的链表

转载 作者:太空狗 更新时间:2023-10-29 15:26:12 24 4
gpt4 key购买 nike

我有一个链表,最后一个节点指向 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com