2016-04-02 21 views
1

C'deki bağlantılı listede çalışıyorum ve bu problemle karşılaşıyorum: Aşağıdaki ifadeyi anlamıyorum. İşte benim bağlantılı listenin buradaBu liste ile bağlantılı liste/işaretçi [0]

typedef struct node { 
    int value; 
    struct node *next; 
} node; 

ve benim yapısı Ben kodu üzerinde çalışıyorum edilir:

void reverse(reverse **list)`void reverse(reverse **list) 
{ 
    struct node * prev = NULL; 
    struct node * next; 
    struct node * current = list[0]; 
    while(current!= NULL) 
    { 
     next = current­>next; 
     current­>next = prev; 
     prev = current; 
     current = next ; 
    } 
    list[0] = prev; ­­­­­­­­­­­­­­­­­­­­­­­­­ 
} 

listesi [0] ne anlama gelir? Bağlantılı listemin ilk elemanı mı? Sorunun aptalca olduğunu biliyorum, ama cevabımı her yerde bulamıyorum.

Yardımlarınız için teşekkür ederiz.

+0

Bu diziler ve işaretçiler aynı olduğunu ve böylece obfuscated gunge :( –

+0

yazıyor sanan birinden bağlantılı-liste kodu bu işlev ve yapılandırma türü her ikisi de 'reverse' –

cevap

2

list[0] ilk düğümün bir işaretçisidir ve list bu işaretçinin bir işaretçisidir.

list[0]*(list+0) ile aynıdır, *(list) veya *list ile aynıdır.

Bu yalnızca farklı bir sözdizimidir, bir diziye list işaret ettiği anlamına gelmez.

İlk düğümün işaretçisinin adresi reverse işlevine iletilir. Ardından, işaretçiye işaretçi dereferenced (*list) olur, bu nedenle işlev dışındaki orijinal işaretçi değiştirilir. Bunu yapmadıysanız, orijinal işaretçi değişmeyecekti ve artık listenin başlangıcına işaret etmeyecekti.

İlgili konular