#include <stdio.h>
#define OK  0
#define ERR 1
/*  Punteros */

void swapErroneo(int i, int j);
void swap(int *pi, int *pj);

int main(){
  int x , y, z[3]; 	/* z es un array de enteros 	*/
  int *ip, *jp;  	/* ip y jp son punteros a enteros 	*/

  x = 1; y = 2;  
  z[0] = 3; z[1] = 4; z[2] = -1;
  printf("z[0] = %d\tz[1] = %d\tz[2] = %d\n", *z, *(z+1), *(z+2));
  /*  Equivalente a  printf("z[0] = %d\tz[1] = %d\tz[2] = %d\n", z[0], z[1], z[2]); */


  jp = &z[0]; /*  jp apunta a z[0] equivalente a jp = z */
  printf("z[0] = %d\tz[1] = %d\tz[2] = %d\n",*(jp++),*(jp),*(++jp));

  ip = &x;	/*  ip apunta a x 	*/
  y = *ip;	/*  y vale 1 	*/
  *ip = 0;	/*  x vale 0 	*/

  swapErroneo(x,y); 	/* No intercambia los valores de x e y 	*/
  swap(&x,&y);  		/* Intercambia los valores de x e y 		*/
  swap(ip,z); 		/* Equivalente a swap(&x,&z[0]) 		*/

  jp -= 2;
  swap(z+2,jp); 		/* Equivalente a swap(&z[2],&z[0]) 	*/
	
  return OK;
}

void swapErroneo(int i, int j)
{
  /* Intercambio de los valores de las variables locales */ 
  int temp;

  temp = i;
  i = j;
  j = temp;
	
  return;
}

void swap(int *pi, int *pj)
{
  int temp;

  temp = *pi;
  *pi = *pj;
  *pj = temp;
	
  return;
}
