C: Evaluation of pointer arihmetic: When is an operation done? : <pre><code>void add( int a, int b) {
   a += b;
  }
 void sub( int *a, int* b) {
  *a -= *b; }
 void mul( int a, int *b) {
    a *= *b;
  }
  void div( int *a, int b) {
    *a /= b; }
  int a = 2, b = 3;
  sub( &amp;a, &amp;a );
  add(  a,  b );
  div( &amp;a,  b );
  mul(  b, &amp;a );
  div( &amp;b,  b );
  add(  b,  a );
  printf( "%d\n", a ); 
  printf( "%d\n", b ); 
</code></pre>

<p>Why isn't a = 1 and b = 2, instead a = 0 and b = 1.
Can anyone explain to me what *, &amp;, so what pointer, in this code is the reason for doing an operation?</p>
