/*
 * Ukazatel, dynamické proměnné, operátor sizeof()
 */

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

int i;
int *p_i;   // p_i je ukazatel na int
short n, *pa, *pb, *pc;
void *p;    // p   je netypovy ukazatel

int main(void) {
  i   = 15;
  p_i = &i; // &i ... adresa promenne i
  printf("i=%d  *p_i=%d \n", i,*p_i);

  printf("sizeof(int)       = %d \n", sizeof(int));
  printf("sizeof(short)     = %d \n", sizeof(short));
  printf("sizeof(long)      = %d \n", sizeof(long));
  printf("sizeof(long long) = %d \n", sizeof(long long));

  printf("sizeof(n)     = %d \n", sizeof(n));
  printf("sizeof(pa)    = %d \n", sizeof(pa));
  printf("sizeof(*pa)   = %d \n", sizeof(*pa));

  pa = &n;
  pb = malloc(sizeof(short)); // syntakticky presne:  pb = (short *)malloc(sizeof(short));
  pc = malloc(sizeof(short));
  
  printf("pa ukazuje na adresu %p \n", pa);
  printf("pb ukazuje na adresu %p \n", pb);
  printf("pc ukazuje na adresu %p \n", pc);
  
  *pa = 1;
  *pb = 2;
  *pc = *pa + *pb;
  printf("vysledek = %d\n", *pc);
  
  free(pb); // syntakticky presne:  free((void *)pb);
  free(pc);
  return 0;
}