Source of pointers7.cpp


  1: //pointers7.cpp

  3: #include <iostream>
  4: using namespace std;

  6: int main()
  7: {
  8:     cout << "\nThis program illustrates the use of const with pointers.";
  9:     cout << "\nPress Enter to continue ... ";  cin.ignore(80, '\n');

 11:     cout << "\nThere are four scenarios to illustrate, depending on "
 12:         "whether the entity\nrequired to be constant is the pointer, "
 13:         "or the pointee, or both, or neither.\nThe program will require "
 14:         "a certain mount of comment activation/de-acitvation\nand "
 15:         "re-building to verify all of the stated claims.";
 16:     cout << "\nPress Enter to continue ... ";  cin.ignore(80, '\n');

 18:     ////Case 1
 19:     ////Not using const means both pointer and pointee can change
 20:     //int i = 1;
 21:     //int j = 2;
 22:     //int * p = &i;
 23:     //p = &j; //OK (the pointer value can be altered)
 24:     //*p = 6; //OK (the value pointed to can also be altered)

 26:     ////Case 2
 27:     ////Illustrates when pointer can change but pointee can't
 28:     //int i = 1;
 29:     //int j = 2;
 30:     //const int * p = &i;
 31:     //int const * p = &i; //This line is equivalent to the one above.
 32:     //p = &j; //OK     (the pointer value can be altered)
 33:     //*p = 6; //not OK (the value pointed to cannot be altered)

 35:     ////Case 3
 36:     ////Illustrates when pointee can change but pointer can't
 37:     //int i = 1;
 38:     //int j = 2;
 39:     //int * const p = &i;
 40:     //p = &j; //not OK (the pointer value cannot be altered)
 41:     //*p = 6; //OK     (the value pointed to can be altered)

 43:     ////Case 4
 44:     ////Illustrates when neither pointer nor pointee can change
 45:     //int i = 1;
 46:     //int j = 2;
 47:     //const int * const p = &i;
 48:     //p = &j; //not OK (the pointer value cannot be altered)
 49:     //*p = 6; //not OK (the value pointed to also cannot be altered)


 52:     ////Illustrates that "const" can appear on either side of type name,
 53:     ////not only with pointer types but with "ordinary" types as well.
 54:     //const int i = 5;
 55:     //int const j = 6;
 56:     //cout << i << j << endl;
 57: }