struct NODE{ struct NODE Succ; struct NODE Prev; }; struct LIST{ struct NODE *Head; struct NODE *Tail; int count; }; struct LIST *List; struct NODE *N; ...... for(N = List->Head;N;N = N->Succ) { ...... }
the side effect of N = N->Succ; is that the compiler think about the statement as follow: List->Head = List->Head->Succ; What on earth made you believe that? N is a copy of List->Head, not an alias, so further modifications to N will not modify List->Head at all. You seem to be in serious need of a re-visit to your C textbooks to understand what pointers are, and how they work.