#include /* Note: Generally, having global variables is a bad design. They're used here to be visible in printValues (without have to pass them in each time) */ int number = -1; int* intPtr1; int* intPtr2; void printValues(char* header){ printf("\n"); printf("%s", header); printf( "---------------------------------\n"); printf( "&number: %p, number: %d\n", &number, number); printf("&intPtr1: %p, intPtr1: %p, *intPtr1: ", &intPtr1, intPtr1); if( intPtr1 != NULL ){ printf ("%d\n", *intPtr1); }else{ printf ("(N/A) - NULL pointer\n"); } printf("&intPtr2: %p, intPtr2: %p, *intPtr2: ", &intPtr2, intPtr2); if( intPtr2 != NULL ){ printf ("%d\n", *intPtr2); }else{ printf ("(N/A) - NULL pointer\n"); } } int main(){ printValues("Initial\n"); printValues("1) After making intPtr1 point to number\n"); printValues("2) After assigning 3 to the variable that intPtr1 is pointing to (using intPtr1)\n"); printValues("3) After making intPtr1 point to a newly allocated int\n"); printValues("4) After assigning that new int to 7\n"); printValues("5) After copying the address stored in intPtr1 to intPtr2\n"); printValues("6) After making intPtr2 point to a newly allocated int\n"); printValues("7) After assigning that new int to 1\n"); printValues("8) After freeing up the allocated memory and set both pointers to NULL\n"); return 0; }