/*
 * Soubor:  20101112-Fri-ukazatele-S4.c
 * Datum:   12.11.2010 10:05
 * Autor:   Marek Nožka, nozka z@vináč spseol tečka cz
 * Licence: GNU/GPL 
 * Úloha:   Demonstrace ukazatelů a předává parametrů funkcím.
 */

#include <stdio.h>


/* 
 * Funkce má prohazovat x a y, ale neděje se tak, protože při volání funkce
 * se pracuje s lokálními kopiemi předávaných proměnných => po ukončení
 * funkce jsou původní proměnné nezměněné.*/
void prohod_nefunguje(int x, int y)
{
    int bagr; // pomocná proměnná
    bagr = x;
    x = y;
    y = bagr;
    printf("###### %d %d\n",x,y);
}


void prohod(int *x, int *y)
{
    int bagr; // pomocná proměnná
    bagr = *x;
    *x = *y;
    *y = bagr;
}


/////////////////////////////////////////////////////
#define P printf
/**
 * Hlavní program.
 */
int main(void) {
    int a=2;
    int b=11;
    int *p_i;   // ukazatel na int
/*      ^
 *       `-- ukazatel na int        */

    printf("%d %d\n",a,b);
    p_i = &a;  // & vydá adresu proměnné a 
    /* v p_i je nyní uložena adresa a*/
    *p_i = 38; /* *(hvězdička) zajistí, že ukládám ne do p_i ale 
                   na adresu, kterou p_i obsahuje */
    printf("%d %d\n",a,b);
    b = *p_i;
    printf("%d %d\n",a,b);

    a = 33; b = 88;
    prohod(&a,&b);
    printf("%d %d\n",a,b);

    printf("zadej celé číslo > ");
    scanf("%d",&b);
    printf("zadal jsi číslo: %d\n",b);

    return 0;
}

