循环链表C.

时间:2015-11-01 09:56:18

标签: c

我是C世界的新人,我想澄清关于链接列表的一些观点。

我想在由以下结构组成的列表上创建一个循环:

typedef struct _mystruct{
    int data[10];
    struct _mystruct *prev;
    struct _mystruct *next;
} MyStruct;

我看到的例子是:

void myFunction(MyStruct **list){
    MyStruct *tmp = *list;
    while(tmp){
        // instructions;
        tmp=tmp->next;
    }
}

为什么会这样?影响*listtmp后,它不会同时更改*list,成为指针吗?并不是list指出最后一次出现?如果是这样,为什么我们不在while循环中直接使用*list

提前感谢您的宝贵帮助!

1 个答案:

答案 0 :(得分:0)

该分配会将tmp初始化为值*list副本。虽然tmp*list最初指向同一个对象,但它们本身是不同的指针对象,而更改它们不会影响另一个。

它可能会帮助你直接制作一个typedef;以下版本的myFunction与您在帖子中写的相同:

typedef MyStruct *pMyStruct;
void myFunction(pMyStruct *list){
    pMyStruct tmp = *list;
    while(tmp){
        // instructions;
       tmp=tmp->next;
    }
}