| references/ref-basic-2.cc - No operator operates on a reference as such. | Lecture 2 - slide 15 : 29 Program 2  | 
// Illustrate references vs. pointers.
// Example similar to the function g on page 98 in 'The C++ Programming Language' (3ed)
// and on page 190 in 'The C++ Programming Language' (4ed).
// The morale is that ++ applied on a pointer does pointer arithmetic. 
// ++ applied on a reference does not affect the reference as such.
#include <iostream>
#include <string>
using namespace std;
void g(){
  // HERE WE ILLUSTRATE REFERENCES:
  int ii = 0;
  int& rr = ii;              // rr is a reference to ii - an alias to ii
  rr++;                      // ii is incremented.
                             // The reference is NOT incremented itself.
  cout << ii << endl;        // 1
  cout << rr << endl;        // 1
  // HERE WE DO SIMILAR THINGS WITH POINTERS:
  int* pp = &rr;             // pp is really the address of ii (via rr) - a pointer to ii.
                             // NOT a pointer to a reference!
  (*pp)++;                   // ii is incremented again, 
  pp++;                      // The pointer as such is incremented - pointer arithmetic.
                             // Not good...
  cout << ii  << endl;       // 2
  cout << *pp << endl;       // 2673944
  pp--;                      // Better revert to the original value
  cout << *pp << endl;       // Still 2. No harm has been done. 
}
int main(){
  g();
}