1: //TestStuff20141006.cpp 2: //Monday, October 6, 2014 3: 4: #include <iostream> 5: using namespace std; 6: 7: #include "utilities.h" 8: using Scobey::Pause; 9: 10: int main(int argc, char* argv[]) 11: { 12: int i = 12; //A "regular" variable 13: cout << i << endl; //Let's output its value 14: cout << &i << endl; //Let's output the memory address where it's stored 15: //Note: & (in this context) is called the 16: //"address of" operator (&i is the "address of i") 17: 18: int* iPtr = &i; //A pointer variable containing the address of i 19: cout << iPtr << endl; //Displays same value as &i 20: cout << *iPtr << endl; //iPtr "dereferenced" is another name for i 21: 22: *iPtr = 15; //Also changes the value in i 23: cout << i << endl; //As we can see here 24: cout << *iPtr << endl; //Same value that's in i 25: 26: iPtr = new int; //Now get an "anonymous" storage location from "the heap" 27: //Another name for "the heap" is "the free store" 28: //Java also uses the heap, but more "behind the scenes" 29: cout << iPtr << endl; //Not a value we're interested in 30: cout << *iPtr << endl; //Outputs a garbage value 31: *iPtr = 25; //Now we've stored a value in our location on the heap 32: cout << *iPtr << endl; //Let's confirm that our value 25 is there 33: delete iPtr; //Note careully!! iPtr doesn't go anywhere ... what this does 34: //is break the connection between the pointer and the thing 35: //that it points to 36: cout << *iPtr << endl; //We no longer have access to 25; garbage again 37: iPtr = nullptr; //Good practice: explicitly says that iPtr does not point 38: //at anything 39: 40: //Make sure you know how to draw "pointer pictures"!!!! 41: //The Ptr suffix in iPtr is not necessary, just a convenient convention 42: //to help distinguish "pointer variables" from "regular variables". 43: } 44: