gpt4 book ai didi

c - 函数不向双向链表添加元素

转载 作者:太空宇宙 更新时间:2023-11-04 07:13:28 24 4
gpt4 key购买 nike

我一直在用 C 编写一个双向链表,即使在列表后面插入一个元素的函数对我来说似乎是正确的,但该元素并没有被添加。调试显示值已分配给相应的 Pacijent 实例,但是列表的 frontback 仍然是 NULL.

代码如下:

struct Pacijent
{
char ime[10];
[...]
Pacijent *prev;
Pacijent *next;
};

Pacijent noviPacijent(char i[], char p[], char io[], int jmb[], double v, double t, int s)
{
Pacijent *novi = (Pacijent*)malloc(sizeof(Pacijent));
memcpy(novi->ime, i, strlen(i)+1);
[...]
return *novi;
}

struct Lista
{
Pacijent *front;
Pacijent *back;
};

void assign(Pacijent p1, Pacijent p2)
{
memcpy(p1.ime, p2.ime, strlen(p1.ime)+1);
[...]
}

void insertBack(Pacijent p, Lista l)
{
Pacijent *novi = (Pacijent*)malloc(sizeof(Pacijent));
assign(*novi, p);
if (l.back == NULL)
{
l.front = l.back = novi;
novi->prev = NULL;
novi->next = NULL;
}
else
{
novi->prev = l.back;
l.back->next = novi;
novi->next = NULL;
l.back = novi;
}
}

int main()
{
Lista *lista = (Lista*)malloc(sizeof(Lista));
lista->back = lista->front = NULL;

int jmb2[13] = { 1, 2, 0, 1, 9, 9, 3, 0, 0, 0, 0, 0, 0 };
[...]
Pacijent p2 = noviPacijent("Mladen", "Markovic", "Milan", jmb2, 1.85, 75, 21);

insertBack(p2, *lista);
}

最佳答案

看:

void insertBack(Pacijent p, Lista l)

此函数采用 Lista 值作为参数,而不是 Lista 指针。这意味着如果你改变任何关于 l 的东西,它不会在函数之外产生影响。当您调用 insertBack 时,您实际上是在复制您的列表,然后将一个元素添加到临时列表。

编辑:您的 assign 函数也会发生同样的情况,您对 p1 所做的更改不会在函数外部产生任何影响,因为您将它作为值而不是作为值传递指针。

关于c - 函数不向双向链表添加元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26579585/

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