我想打印我的双链表。这是函数
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 element 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;
答案 0 :(得分:0)
q
和temp
都是指针,也就是说,它们将地址存储在内存中。通过修改其中一个指向的数据,通过另一个指针检索该数据将反映这些更改,因为它们都指向内存中的相同位置。数据本身只存储在一个地方。
如果要迭代列表,您将需要一个指向节点的临时指针,您将使用本地计数器(而不是修改列表中的计数器)遍历列表:
//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--;
}
}
答案 1 :(得分:0)
答案 2 :(得分:0)
q
是内存的地址。你说temp
也应该是记忆的地址。这是由于*
。当您指定temp = q
时,您说temp
的地址将与内存中的q
的地址相同。如果您希望新的que
变更,请在*
之前使用temp
。