/*
 * An overview of variables and pointers.
 */
#include <stdio.h>

int main(int argc, char *argv[]) {
  int num;
  int* addr;
    
  //variable definition (uninitialized)
  printf("num = %d or %x\n", num, num);
  printf("&num = %p\n\n", &num);
  
  //variable initialization
  num = 4;
  printf("num = %d or %x\n", num, num);
  printf("&num = %p\n\n", &num);
  
  //Following line generates a warning (on some systems).  
  //Although an address is an int, you should store it as a pointer.
  //  int notPointer = &num;  
  
  //pointer definition (uninitialized)
  printf("addr = %d or %x\n", addr, addr);
  printf("&addr = %p\n\n", &addr);
  
  //pointer initialization
  addr = &num;
  printf("addr = %d or %x\n", addr, addr);
  printf("&addr = %p\n\n", &addr);
    
  return 0;
}
