Obsah // Předmluva 12 // 1 Úvod 14 // 1.1 K — vznik, vývoj, charakteristika 14 // 1.2 Typografické a syntaktické konvence 16 // 1.3 Styl psaní programů 16 // 2 Základní pojmy 17 // 2.1 Způsob zpracování programu 17 // 2.2 Základní pojmy v jazyce K 18 // 2.2.1 Zdrojové a hlavičkové soubory 19 // 2.2.2 Bílé znaky 19 // 2.2.3 ASCII tabulka 19 // 2.2.4 Identifikátory 20 // 2.2.5 Komentáře 21 // 3 První začátky s K 23 // 3.1 Jednoduché datové typy a přiřazení 23 // 3.1.1 Definice proměnných 24 // 3.1.2 Přiřazení 25 // 3.2 Hlavní program 25 // 3.3 Konstanty 27 // 3.3.1 Celočíselné konstanty 27 // 3.3.2 Reálné konstanty 28 // 3.3.3 Znakové konstanty 28 // 3.3.4 Řetězcové konstanty (literály) ’.. 29 // 3.4 Aritmetické výrazy 29 // 3.4.1 Unární operátory 30 // 3.4.2 Binární operátory 30 // 3.4.3 Speciální unární operátory 30 // 3.4.4 Přiřazovací operátory 31 // 4 Terminálový vstup a výstup 33 // 4.1 Hlavičkový soubor stdio. h 33 // 4.2 Vstup a výstup znaku 33 // 4.3 Formátovaný vstup a výstup 34 // 4.3.1 Řídící řetězec formátu 35 // 5 Řídící struktury 40 // 5.1 Booleovské výrazy 42 // 5.1.1 Zkrácené vyhodnocování logických výrazů 42 // 5.1.2 Priority vyhodnocování logických výrazů 43 // 5.2 Podmíněný výraz — ternární operátor 44 // 5.3 Operátor
čárky 45 // 5.4 Příkaz if a příkaz if-else 46 // 5.5 Iterační příkazy — cykly 49 // 5.5.1 Příkazy break a continue 49 // 5.5.2 Příkaz while 50 // 5.5.3 Příkaz do-while 51 // 5.5.4 Příkaz for 52 // 5.6 Příkaz switch 54 // 5.7 Příkaz goto 59 // 5.8 Příkaz return 59 // 6 Vstup ze souboru a výstup do souboru 63 // 6.1 Začátek práce se souborem 65 // 6.1.1 Otevření souboru pro čtení 66 // 6.1.2 Otevření souboru pro zápis 66 // 6.2 Základní operace s otevřeným souborem 66 // 6.3 Ukončení práce se souborem 67 // 6.4 Příklady základní práce se soubory 67 // 6.5 Testování konce řádky 69 // 6.6 Testování konce souboru 71 // 6.6.1 Pomocí symbolické konstanty EOF 71 // 6.6.2 Pomocí standardního makra ťeof () 72 // 6.7 Testování správnosti otevření a uzavření souboru 73 // 6.8 Standardní vstup a výstup 75 // 6.9 Vrácení přečteného znaku zpět do vstupního bufferu 78 // 6.10 Různé možnosti otvírání souborů 79 // 6.11 Rozdíl při zpracovávání textových a bin. souborů v MS-DOSu 80 // 6.12 Práce s binárními soubory 82 // 6.12.1 Čtení a zápis do binárního souboru 82 // 6.12.2 Pohyb v binárním souboru 83 // 6.12.3 Příklad použití binárního souboru 83 // 7 Typová konverze 86 // 7.1 Implicitní typová konverze 86 // 7.2 Explicitní typová konverze 87 // 8 Preprocesor jazyka K
89 // 8.1 Makra bez parametrů—příkaz define 90 // 8.2 Makra s parametry 93 // 8.2.1 Předdefinovaná makra 94 // 8.3 Vkládání souborů — příkaz include 95 // 8.3.1 Vkládané soubory 96 // 8.3.2 Standardní hlavičkové soubory 97 // 8.3.3 Soubor time.h — měření času 98 // 8.4 Oddělený překlad souborů — 1 99 // 8.5 Podmíněný překlad 100 // 8.5.1 Řízení překladu hodnotou konstantního výrazu 102 // 8.5.2 Řízení překladu definicí makra 103 // 8.5.3 Operátor defined 104 // 8.5.4 Direktivy #elif a #error 104 // 9 Funkce a práce s pamětí 107 // 9.1 Alokace paměti 108 // 9.1.1 Statická alokace 108 // 9.1.2 Dynamická alokace 109 // 9.1.3 Vymezení paměti v zásobníku 109 // 9.2 Funkce 109 // 9.2.1 Definice funkce 110 // 9.2.2 Procedury a datový typ void 112 // 9.2.3 Rekurzivní funkce 113 // 9.2.4 Funkce nevracející int 113 // 9.2.5 Problémy s umístěním definice funkcí 114 // 9.2.6 Konverze návratové hodnoty funkce 117 // 9.2.7 Parametry funkcí 117 // Konverze skutečných parametrů 118 // 9.3 Oblast platnosti identifikátorů 118 // 9.3.1 Globální a lokální proměnné 118 // 9.3.2 Paměťové třídy 122 // Třída auto 123 // Třída extern 123 // Třída static 123 // Třída register 125 // 9.3.3 Typové modifikátory 126 // Modifikátor const 126 // Modifikátor volatile 127 // 9.3.4 Bloky
127 // 9.4 Oddělený překlad souborů — II 129 // 9.4.1 Rozšíření platnosti globální proměnné 129 // 9.4.2 Statické globální proměnné a funkce 130 // 9.4.3 Jak udržet pořádek ve velkém programu 132 // Doporučený obsah . K souboru 133 // Doporučený obsah . H souboru 135 // 9.5 Inicializace jednoduchých proměnných 142 // 10 Pointery 146 // 10.1 Základy práce s pointery 147 // 10.1.1 Definice dat typu pointer na typ 147 // 10.1.2 Práce s adresovými operátory 148 // 10.1.3 Přiřazení hodnoty pointerům a pomocí pointerů 148 // 10.1.4 Použití pointerů v přiřazovacích příkazech 149 // 10.1.5 Nulový pointer NULL 151 // 10.1.6 Konverze pointerů 152 // 10.1.7 Zarovnávání v paměti 152 // 10.2 Pointery a funkce 152 // 10.2.1 Volání odkazem 152 // 10.2.2 Pointer na typ void 156 // Pointer na typ void jako pointer na několik různých typů 156 Pointer na typ void jako formální parametr funkce 157 // 10.2.3 Pointery na funkce a funkce jako parametry funkcí 157 // 10.3 Jak číst komplikované definice —1 160 // 10.4 Definice s využitím operátoru typedef 161 // 10.5 Pointerová aritmetika 162 // 10.5.1 Operátor sizeof 163 // 10.5.2 Součet pointeru a celého čísla 163 // 10.5.3 Odečítání celého čísla od pointeru 164 // 10.5.4 Porovnávání pointerů 165 // 10.5.5 Odečítání pointerů 166 // 10.6 Dynamické přidělování
a navracení paměti 166 // 10.6.1 Přidělení paměti 167 // 10.6.2 Uvolňování paměti 169 // 10.6.3 Příklady přidělování paměti 169 // 10.6.4 Funkce callocO 170 // 10.7 Pointer jako skutečný parametr funkce 171 // 11 Jednorozměrná pole 175 // 11.1 Základní dovednosti 175 // 11.2 Pole a pointery 178 // 11.2.1 Dynamická pole 179 // 11.2.2 Podobnost statických a dynamických polí 180 // 11.2.3 Další zvláštnosti a dovednosti při práci s poli 181 // Práce s celým polem najednou 181 // Přístup do pole pomocí pointerů 181 // Jak zjistit velikost pole 183 // 11.3 Pole měnící svoji velikost 183 // 11.4 Pole jako parametry funkcí 185 // 11.5 Pole pointerů na funkce 189 // 11.6 Jak číst komplikované definice — II 190 // 12 Řetězce 194 // 12.1 Základní informace a definování řetězců 194 // 12.2 Práce s řetězcem 197 // 12.2.1 Čtení řetězce z klávesnice 198 // Čtení řetězce v daném formátu 198 // 12.2.2 Tisk řetězce na obrazovku 200 // 12.2.3 Přístup k jednotlivým znakům řetězce 201 // 12.2.4 Standardní funkce pro práci s řetězci 202 // Délka řetězce 202 // Kopírování řetězce 202 // Spojení řetězců 202 // Nalezení znaku v řetězci 202 // Porovnání dvou řetězců 202 // Nalezení podřetězce v řetězci 203 // Práce s omezenou částí řetězce 203 // Práce s řetězcem
pozpátku 203 // Převody řetězců na čísla 203 // 12.3 Formátované čtení a zápis z a do řetězce 204 // 12.4 Řádkově orientovaný vstup a výstup z terminálu 206 // 12.4.1 Čtení řádky z klávesnice 206 // 12.4.2 Výpis řádky na obrazovku 207 // 12.5 Řádkově orientovaný vstup a výstup ze souboru 207 // 12.5.1 Čtení řádky ze souboru 207 // 12.5.2 Zápis řádky do souboru 208 // 12.6 Řídící řetězec formátu pro tisk 209 // 12.6.1 konverze 209 // 12.6.2 modifikátor 210 // 12.6.3 šířka 210 // 12.6.4 přesnost 211 // 12.6.5 příznak 211 // 12.6.6 Příklady různých formátů tisku 212 // 13 Vícerozměrná pole 215 // 13.1 Základní definice a přístup k prvkům 215 // 13.2 Uložení vícerozměrných polí v paměti 215 // 13.3 Různé způsoby definice dvourozměrných polí 217 // 13.3.1 Statické dvourozměrné pole 218 // 13.3.2 Pole pointerů 218 // 13.3.3 Pointer na pole 219 // 13.3.4 Pointer na pointer 219 // 13.3.5 Výhody a nevýhody předchozích čtyř způsobů 220 // 13.3.6 Dvourozměrné pole jako parametr funkce 222 // 13.4 Inicializace polí všech rozměrů 223 // 13.5 Pole řetězců 224 // 13.6 Parametry funkce main() 226 // 13.7 Externí pole všech rozměrů 228 // 14 Struktury, uniony a výčtové typy 231 // 14.1 Struktury 231 // 14.1.1 Definice a základní dovednosti 231 // 14.1.2 Struktury
a pointery 234 // 14.1.3 Struktury odkazující samy na sebe 235 // 14.1.4 Struktura v jiné struktuře 237 // 14.1.5 Alokace paměti pro jednotlivé položky struktury 239 // 14.1.6 Struktury a funkce 240 // 14.1.7 Shrnutí poznatků o práci se strukturami 243 // 14.1.8 Inicializace struktur 244 // 14.2 Výčtový typ 245 // 14.3 Uniony 247 // 14.3.1 Rozdíl mezi variantním záznamem v Pascalu a unionem 251 // 15 Bitové operace a bitové pole 255 // 15.1 Operace s jednotlivými bity 255 // 15.1.1 Bitový součin 256 // 15.1.2 Bitový součet 256 // 15.1.3 Bitový exkluzivní součet 257 // 15.1.4 Operace bitového posunu doleva 257 // 15.1.5 Operace bitového posunu doprava 257 // 15.1.6 Negace bit po bitu 258 // 15.1.7 Způsoby práce se skupinou bitů 258 // 15.2 Bitové pole 259 // 16 Tabulka preferencí 262 // Literatura 265 // Rejstřík 266