Tyto stránky již nejsou udržovány. Obsah je postupně přesouván/aktualizován na adrese chytrosti.marrek.cz.

44/209

Zdrojové soubory z výuky

Na této stránce jsou k dispozici zdrojové soubory, které jsem vytvářel při výkladu během výuky. Nejsou to ukázkové a bezchybné zdrojové soubory. Ba naopak, jsou to pracovní neučesané verze, které vznikaly interaktivně ve výuce, často s cílem ukázat, že "takto se to nemá".

20101112-Fri-ukazatele-P4.c
   1 /*
   2  * Soubor:  20101112-Fri-ukazatele-P4.c
   3  * Datum:   12.11.2010 08:22
   4  * Autor:   Marek Nožka, nozka z@vináč spseol tečka cz
   5  * Licence: GNU/GPL 
   6  * Úloha:  Demonstrace práce s ukazateli a předávání parametrů funkcím
   7  */
   8 
   9 #include <stdio.h>
  10 
  11 /* 
  12  * Demonstrace předávání parametrů hodnotou.
  13  * x a y se po volání funkce nezmění a mají stejné hodnoty
  14  * jako před voláním funkce, protože se nepracuje přímo s x a y
  15  * ale s jejich lokálními kopiemi. */
  16 void volani_hodnotou(int x, int y)
  17 {
  18     printf("před: %d %d\n",x,y);
  19     x=92;
  20     y=52;
  21     printf("  po: %d %d\n",x,y);
  22 }
  23 
  24 /* 
  25  * funkce vymění obsah proměnných x a y
  26  *
  27  * Demonstrace předávání parametrů hodnotou. Tzn., že předáváme
  28  * ne x a y ale adresy x a y.
  29  */
  30 void change(int *x, int *y)
  31 {
  32     int bagr;  // pomocná proměnná
  33     bagr = x;
  34     *x = *y;
  35     *y = bagr;
  36 }
  37 /////////////////////////////////////////////////////
  38 //#define P printf
  39 /**
  40  * Hlavní program.
  41  */
  42 int main(void) {
  43     int a=30;    /* běžné proměnné */
  44     int b=78;
  45     int *p_i;    /* ukazatel na int */
  46 
  47     printf("%d %d\n",a,b);
  48     p_i = &b;  /* operátor & vydá adresu na b */
  49     /* nyní je v p_i uložena adresa proměnné b */
  50 
  51     *p_i=50; /* *(hvězdička) zajistí, že se ukládá ne do p_i
  52                 ale tam kam p_i ukazuje. Tj. do b. */
  53     printf("%d %d\n",a,b);
  54     a = *p_i;
  55     printf("%d %d\n",a,b);
  56 
  57     volani_hodnotou(a,b);
  58     printf("%d %d\n",a,b);
  59 
  60     a=11; b=22;
  61     change(&a,&b);
  62     printf("%d %d\n",a,b);
  63 
  64     printf("zadej číslo > ");
  65     scanf("%d",&b);
  66     printf("zadal jsi: %d\n",b);
  67 
  68     return 0;
  69 }
`--> stáhnout

Licence Creative Commons Valid XHTML 1.0 Strict Valid CSS! Antispam.er.cz Blog: Tlapicka.net