C语言 链表值改变时,我想打印它



我想打印我的双链表。下面是函数

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:%dn", temp->fr->dat, temp->fr->priority);
            temp->fr = temp->fr->prv;
            temp->cnt--;
        }
    }
}

我把结构元素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都是指针,也就是说,它们在内存中存储地址。通过修改其中一个指针指向的数据,通过另一个指针检索该数据将反映这些更改,因为它们都指向内存中的相同位置。数据本身只存储在一个地方。

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

//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:%dn", temp->dat, temp->priority );
        //Point to the next node in the queue
        temp = temp->prv;
        //Decrement our local counter
        cnt--;
    }
}
  1. temp也指向内存中的q,改变temp->cnt——的值与q->cnt——
  2. 相同
  3. 最好使用int count = q->cnt,操作count变量

q是一个内存地址。你说temp也应该是内存地址。这是由于*。当你给temp = q赋值时,你说temp的地址应该和q在内存中的地址相同。如果你想要一个新的que变量,不要在temp之前使用*

相关内容

  • 没有找到相关文章

最新更新