This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

for(N = List->Head;N;N = N->Succ)

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)
{
    ......
}
Compiler C51 changed value of List->Head because of the side effect of N = N->Succ.What can I do?

Parents
  • Your report is crucially incomplete. How do you detect that something happened to List->Head? There's not even a vague hint of actual results of running this code in your posting.

    And what side effect of

    N=N->Succ
    would that be supposed to be? Because, by my book, there is none to be seen in there.

    And to top it all off, there's a potentially fatal typo in your quoted source code snippet:

    struct NODE{
         struct NODE Succ;  // should be *Succ
         struct NODE Prev;  // should be *Prev
    };
    

Reply
  • Your report is crucially incomplete. How do you detect that something happened to List->Head? There's not even a vague hint of actual results of running this code in your posting.

    And what side effect of

    N=N->Succ
    would that be supposed to be? Because, by my book, there is none to be seen in there.

    And to top it all off, there's a potentially fatal typo in your quoted source code snippet:

    struct NODE{
         struct NODE Succ;  // should be *Succ
         struct NODE Prev;  // should be *Prev
    };
    

Children
  • You are right,I forgot asterisk.the orignal source code is as follow:

    struct NODE{
         struct NODE *Succ;
         struct NODE *Prev;
    };
    

    the side effect of
    N = N->Succ;
    
    is that the compiler think about the statement as follow:
    List->Head = List->Head->Succ;
    
    because
    N = List->Head;
    
    So the original List->Head lost.

  • 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.