2015-11-01 3 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; 
    } 
} 

Почему это возможно? После воздействия на *list на tmp, не изменится ли он *list в то же время, будучи указателем? И не list собирается указывать на последнее появление? Если да, почему бы нам не использовать напрямую *list в цикле while?

Заранее благодарим за полезную помощь!

+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; 
    } 
} 
Смежные вопросы