#include <stdio.h>
#include <stdlib.h>

int nums_global[5] = {23, 24, 25, 26, 27};

int main(int argc, char * argv[]) {

  int nums_local[5] = {23, 24, 25, 26, 27};

  /*int howMany;
  printf("How many numbers? ");
  scanf("%d", &howMany);
  int *nums2 = (int *) malloc(sizeof(int) * howMany);
  int nums2[howMany];  // you can do this, but nums2 is on the stack (local memory). the stack is small.
  */
  
  int *nums_dynamic = (int *) malloc(sizeof(int) * 5);
  
  nums_dynamic[0] = 23; nums_dynamic[1] = 24; nums_dynamic[2] = 25; nums_dynamic[3] = 26; nums_dynamic[4] = 27;

  printf("local/stack  - %p\n", &(nums_local[0]));

  int x;
  printf("local/stack  - %p\n", &x);
  
  printf("dynamic/heap - %p\n", &(nums_dynamic[0]));
  *num_dynamic = 30;
  printf("local/stack  - %p\n", &nums_dynamic);
  
  printf("global/data  - %p\n", &(nums_global[0]));
  printf("main/code    - %p\n", main);
  
  return 0;
}