Tyto stránky již nejsou udržovány. Obsah je postupně přesouván/aktualizován na adrese chytrosti.marrek.cz.
1/1
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á".
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 }