gpt4 book ai didi

c - 当我想打印链接列表值时它发生了变化

转载 作者:行者123 更新时间:2023-11-30 17:37:38 25 4
gpt4 key购买 nike

我想打印我的双向链表。这是函数

void show(que *q) {
que *temp;
temp = q;

if (q->cnt == 0)
printf ("\nEmpty.\n");
else {
while (temp->cnt > 0) {
printf("%d[prioriy=%d] cnt:%d\n", temp->fr->dat, temp->fr->priority);
temp->fr = temp->fr->prv;
temp->cnt--;
}
}
}

我将struct元素q赋值给其他元素temp,并且只修改temp,但是为什么q<的值不改变 也改变?例如,q->cnt 变为等于零,尽管我没有修改它。

编辑:

typedef int kintyr;

typedef struct qElem {
struct qElem *prv;
kintyr *dat;
int *priority;
} qElem;


typedef struct que {
qElem *fr, *bk;
int cnt;
} que;

最佳答案

qtemp都是指针,也就是说,它们在内存中存储地址。通过修改其中一个指针所指向的数据,通过另一个指针检索该数据将反射(reflect)这些更改,因为它们都指向内存中的同一位置。数据本身仅存储在一处。

如果您想迭代列表,则需要一个指向节点的临时指针,您将使用本地计数器遍历列表(而不是修改列表中的计数器):

//Set a temporary node to point to the front of the queue
qElem *temp = q->fr;
//Create a local variable to track where in the queue we are
int cnt = q->cnt;
if(cnt==0)
printf ("\nEmpty.\n");
else
{
while(cnt>0)
{
printf( "%d[prioriy=%d] cnt:%d\n", temp->dat, temp->priority );
//Point to the next node in the queue
temp = temp->prv;
//Decrement our local counter
cnt--;
}

}

关于c - 当我想打印链接列表值时它发生了变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22334517/

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