/**************************************************************/
// R. A. Hillyard
// pointer03.cpp
// November 2001
//
// Program to demonstrate the use of pointers, new, and delete
/**************************************************************/
#include<iostream>

using namespace std;

int main()
  {
  int *intPtr1, *intPtr2;

  //allocate new memory and point to it
  intPtr1 = new int;
  intPtr2 = new int;

  //print out value of uninitialized memory locations  
  cout <<  "intPtrs address: " <<  intPtr1 << " " <<  intPtr2 << endl;
  cout <<  "intPtrs value  : " << *intPtr1 << " " << *intPtr2 << endl << endl;
  
  //set the value using the defererencing operator
  *intPtr1 = 33;
  *intPtr2 = 22;
    
  cout << "intPtr1: " << intPtr1 << " " << *intPtr1 << endl;
  cout << "intPtr2: " << intPtr2 << " " << *intPtr2 << endl << endl;
  
  //lost reference problem - what intPtr1 was 
  //pointing to is now "lost"
  intPtr1 = intPtr2;
  cout << "intPtr1:  " << intPtr1 << " " << *intPtr1 << endl;
  cout << "intPtr2:  " << intPtr2 << " " << *intPtr2 << endl << endl;

  //reset pointers for next example
  intPtr1 = new int;
  //give back memory when finished
  delete intPtr2;

  intPtr2 = intPtr1;
  *intPtr1 = 77;
  cout << "intPtrs: " << intPtr1 << " " << *intPtr1 << " " << *intPtr2 <<  endl;

  //give back memory when finished
  delete intPtr1;
  return 0;
  }
/*********************Program Output***************************/
intPtrs address: 0x00133560 0x00133570
intPtrs value  : 1258860 1258876

intPtr1: 0x00133560 33
intPtr2: 0x00133570 22

intPtr1:  0x00133570 22
intPtr2:  0x00133570 22

intPtrs: 0x001335a0 77 77