title: gcc compiler printf execution order
body: <p>For the testing code as follow:</p>
  
  <pre><code>#include &lt;stdio.h&gt;
  int addTen(int x, int b[])
  {
    b[2] =  x + b[2];
    return b[2];
  }
  void main(void)
  {
     int a[3] = {4,5,6};
     int i = 2;
     printf("%i %i %i \n", a[i], addTen(10,a), a[i]);
  }
  </code></pre>
  
  <p>Why is the output is 16, 16, 6? I know that even if the compiler processes the order from right to left like  a[i] &lt;- addTen(10,a) &lt;-a[i]. After calling addTen(10,a), a[i] is already 16 (not 6). So why the output is not 16, 16,16? THANKS! </p>