#include <stdio.h>

int a ;
int V[3] ;
int *p ;
int *q ;

void initAll() {
  a = 107 ;
  V[0] = 181 ;
  V[1] = 202 ;
  V[2] = 255 ;
  p = (int *)NULL ;
  q = (int *)NULL ;
  return ;
}

void printAll() {
  printf("a     = %5d\n", a) ;
  printf("V[0]  = %5d\n", V[0]) ;
  printf("V[1]  = %5d\n", V[1]) ;
  printf("V[2]  = %5d\n", V[2]) ;
  if (p == NULL) {
    printf("p     = NULL\n") ;
  } else if (p == &a) {
    printf("p     = &a\n") ;
  } else {
    printf("p     = &v[%d]\n", (int)(unsigned long)(void *)(p - V)) ;
  }
  if (q == NULL) {
    printf("q     = NULL\n") ;
  } else if (q == &a) {
    printf("q     = &a\n") ;
  } else {
    printf("q     = &v[%d]\n", (int)(unsigned long)(void *)(q - V)) ;
  }
}

void doA() {
  initAll() ;
  p = &V[1] ;
  q = &V[2] ;
  *p = 200 ;
  *q = 300 ;
  printAll() ;
}

void doB() {
  initAll() ;
  p = V ;
  q = p + 1 ;
  *p = *q ;
  printAll() ;
}

void doC() {
  initAll() ;
  V[0] = a++ ;
  V[1] = a++ ;
  V[2] = ++a ;
  printAll() ;
}

void doD() {
  initAll() ;
  p = &a ;
  q = &V[0] ;
  *p = q[1] ;
  printAll() ;
}

void doE() {
  initAll() ;
  p = &V[2] ;
  q = &V[0] ;
  *p = *p - *q ;
  *q = p - q ;
  printAll() ;
}

void doF() {
  initAll() ;
  p = &V[0] ;
  *p++ = 320 ;
  a = (*p)++ ;
  printAll() ;
}

int main(int argc, char *argv[]) {
  doA() ;
  doB() ;
  doC() ;
  doD() ;
  doE() ;
  doF() ;
}
