//scambiapunt.cpp
#include<iostream.h>

//Mosta uso di puntatori per realizzare il passaggio per riferimento. Queto uso
//dei puntatori e' tipico del C (non del C++ dove invece si usa il passaggio
//per riferimento e' realizzabile direttamente)

void Scambia(int& a, int& b)
{
  int temp = a;
  a = b;
  b = temp;
}

void ScambiaPunt(int*const pa, int*const pb)
{
  int temp = *pa;
  *pa = *pb;
  *pb = temp;
}

void main()
{
  int x = 100; int y = 200;
  cout << x << ' ' << y <<endl;

  Scambia(x,y);
  cout << x << ' ' << y <<endl;

  ScambiaPunt(&x,&y);
  cout << x << ' ' << y <<endl;

  pippo(&x);
}


/*
  Nota1: se si voleva evitare che i puntatori potessero essere modificati in
  ScambiaPunt (puntatori costanti), come e' garantito per i riferimenti, allora
  si poteva usare l'intestazione: voidScambiaPunt(int*const pa, int*const pb)

  Nota2: si noti che:

  - int*const p asserisce che p e' un punt costante ad un intero
    cioe' p non si puo' riassegnare, ma *p (l'oggetto puntato) si.

  - const int* p asserisce invece che p e' un puntatore ad una costante intera
    cioe' p si puo' riassegnare, ma *p (l'oggetto puntato) no.
*/
