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