2015-11-01 99 views
0

我是C世界的新来者,我想澄清关于链表的几点。循环链表C

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

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

只见exemples是类型:

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

为什么这可能吗?在影响*listtmp之后,是不是会同时改变*list,作为指针?并且list不是指向最后一次发生?如果是这样,为什么我们不直接在while循环中使用*list

在此先感谢您的宝贵帮助!

+0

“[...]影响'* list'到'tmp' [...]”这就是所谓的初始化。 – Downvoter

+0

感谢您的评论,这是我的问题。它在那里吗?在回路中'* list'会不会受到影响? – Kathandrax

回答

0

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

它可以帮助你直观地做出一个typedef;的myFunction以下的版本是一样的,你在您的文章写了一个:

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