title: How do I modify a pointer that has been passed into a function in C?
body: <p>So, I have some code, kind of like the following, to add a struct to a list of structs:</p>
  
  <pre><code>void barPush(BarList * list,Bar * bar)
  {
      // if there is no move to add, then we are done
      if (bar == NULL) return;//EMPTY_LIST;
  
      // allocate space for the new node
      BarList * newNode = malloc(sizeof(BarList));
  
      // assign the right values
      newNode-&gt;val = bar;
      newNode-&gt;nextBar = list;
  
      // and set list to be equal to the new head of the list
      list = newNode; // This line works, but list only changes inside of this function
  }
  </code></pre>
  
  <p>These structures are defined as follows:</p>
  
  <pre><code>typedef struct Bar
  {
      // this isn't too important
  } Bar;
  
  #define EMPTY_LIST NULL
  
  typedef struct BarList
  {
      Bar * val;
      struct  BarList * nextBar;
  } BarList;
  </code></pre>
  
  <p>and then in another file I do something like the following:</p>
  
  <pre><code>BarList * l;
  
  l = EMPTY_LIST;
  barPush(l,&amp;b1); // b1 and b2 are just Bar's
  barPush(l,&amp;b2);
  </code></pre>
  
  <p>However, after this, l still points to EMPTY_LIST, not the modified version created inside of barPush. Do I have to pass list in as a pointer to a pointer if I want to modify it, or is there some other dark incantation required? </p>