1: //TestStuff20160127.cpp 3: #include <iostream> 4: #include <string> 5: using namespace std; 7: #include "time.h" 9: int main(int argc, char* argv[]) 10: { 11: //int i = 6; 12: //cout << i << endl; 13: //cout << &i << endl; //& is the "address of" operator 15: //int* iPtr; //iPtr is a "pointer variable", point at an int location 16: //iPtr = &i; //iPtr can contain the address of an "ordinary" variable i 17: //cout << iPtr << endl; //Shows same value as &i 18: //cout << *iPtr << endl; //iPtr is "dereferenced" 19: // //to give the value at its address 21: //iPtr = new int; //Now iPtr points at a location on "the heap" 22: //cout << *iPtr << endl; //Outputs a garbage value 23: //*iPtr = 15; //Put 15 in that location on the heap 24: //cout << *iPtr << endl; //Confirm that 15 is indeed there 26: //delete iPtr; //Return the storage to the heap if it's no longer needed 27: //cout << *iPtr << endl; //Garbage again 28: //iPtr = nullptr; //Says explicitly that iPtr does not point at anything 29: //cout << *iPtr << endl; //So now we get a program crash 31: //The sizeof operator returns the number of bytes occupied by a type 32: //or a variable of a certain type 33: //int i = 6; 34: //cout << sizeof i << endl; 35: //cout << sizeof (int) << endl; 36: //int a[] = {1, 2, 3, 4, 5}; 37: //cout << sizeof (a) << endl; 39: //int a[] = {1, 2, 3, 4, 5}; //an ordinary array of int values 40: //int* iptr = &a[0]; //iptr points at the first of those values 41: //cout << *iptr << endl; //shows the first value in the array 42: //iptr = &a[3]; //iptr points at the 4th value in the array 43: //cout << *iptr << endl; //shows the 4th value in the array 45: //int a[] = { 1, 2, 3, 4, 5 }; 46: //cout << *a << endl; //OK because the name of an array is also a pointer 47: // // to its first element 48: //int* iPtr = a; //Equivalent to int* iPtr = &a[0]; 49: //cout << *iPtr << endl; //Shows the first element of the array 51: //We can do "pointer arithmetic" if our pointer points into an array. 52: //That is we can increment and decrement such a pointer variable, or 53: //add or subtract an integer to or from the pointer value, and this 54: //arithmetic is "smart" in the sense that the pointer value will move 55: //the required number of bytes (4 for ints, 8 for doubles, for example). 56: //iPtr++; 57: //cout << *iPtr << endl; 58: //cout << *(iPtr + 2) << endl; 61: //int a[] = {1, 2, 3, 4, 5}; 62: //cout << sizeof (a) << endl; 63: //int* iPtr = a; 64: //cout << *iPtr << endl; 65: //iPtr++; 66: //cout << *iPtr << endl; 67: //a++; //Can't do this because a is "const" 69: //int* iPtr = new int[5]; 70: //cout << sizeof (iPtr) << endl; 71: //iPtr[0] = 1; 72: //iPtr[1] = 2; 73: //iPtr[2] = 3; 74: //iPtr[3] = 4; 75: //iPtr[4] = 5; 76: //for (int i = 0; i < 5; i++) 77: //{ 78: // cout << iPtr[i] << " "; 79: //} 80: //cout << endl; 82: //int a[] = {1, 2, 3, 4, 5}; 83: //cout << *a << endl; 84: //cout << a << endl; 86: //char s1[] = {'H', 'i'}; 87: //cout << *s1 << endl; 88: //cout << s1 << endl; 90: //char s2[] = {'H', 'i', '\0'}; 91: //cout << *s2 << endl; 92: //cout << s2 << endl; 94: //char s3[] = "Hi"; 95: //cout << *s3 << endl; 96: //cout << s3 << endl; 98: //char s[] = "Hello, world!"; 99: //cout << s+7 << endl; 100: //cout << *(s+7) << endl; 102: //What is the output of the following code 103: //if the command-line input is the following 104: //four-word sentence? 105: //That thing hardly passes. 106: //for (int i = 1; i < argc; i++) 107: //{ 108: // cout << *(argv[i]+i); 109: //} 110: //cout << endl; 112: //for (int i = 1; i < argc; i++) 113: //{ 114: // cout << argv[i]+i << endl; 115: //} 117: //char s[] = "Hello, world!"; 118: //char* s = "Hello, world!"; 119: //cout << s + 7 << endl; 120: //cout << *(s + 7) << endl; 123: Time t1(1, 2, 3); 124: cout << t1 << endl; 125: t1.increment(); 126: cout << t1 << endl; 128: Time* tPtr = new Time(); 129: cout << tPtr << endl; 130: cout << *tPtr << endl; 132: (*tPtr).increment(); 133: //Parentheses needed since . has higher precedence than * 135: cout << *tPtr << endl; 137: tPtr->increment(); 138: //Equivalent to, and more concise than, (*tPtr).increment() above 140: cout << *tPtr << endl; 141: }