C von A bis Z Das umfassende Handbuch
von: Jürgen Wolf
Galileo Press, 2006
ISBN: 9783898426435
Sprache: Deutsch
1115 Seiten, Download: 8380 KB
Format: PDF, auch als Online-Lesen
Auf einen Blick | 4 | ||
Inhalt | 6 | ||
Vorwort | 22 | ||
Vorwort zur 2. Auflage | 23 | ||
Vorwort des Gutachters | 26 | ||
1 Einstieg in C | 28 | ||
1.1 Übersicht zu C | 28 | ||
1.2 Der ANSI C-Standard | 29 | ||
1.3 Der POSIX-Standard | 31 | ||
1.4 Vor- und Nachteile der Programmiersprache C | 32 | ||
1.5 C in diesem Buch | 33 | ||
1.6 Was benötige ich für C? | 34 | ||
1.7 Welcher Compiler und welches Betriebssystem? | 36 | ||
2 Das erste Programm | 38 | ||
2.1 Der beste Lernerfolg | 38 | ||
2.2 »Hallo Welt« in C | 38 | ||
2.3 Analyse des Programms | 40 | ||
3 Zeichensätze | 44 | ||
3.1 Basic- Zeichensatz | 44 | ||
3.2 Ausführungszeichensatz (Steuerzeichen) | 44 | ||
4 Kommentare in C | 48 | ||
4.1 Wann sind Kommentare sinnvoll? | 48 | ||
4.2 Welche Kommentar-Schreibweise: // oder /* */ | 49 | ||
5 Formatierte Eingabe mit scanf() | 52 | ||
5.1 Der Adressoperator »&« | 53 | ||
5.2 Probleme und deren Behandlung mit scanf() | 55 | ||
5.3 Format prüfen | 58 | ||
5.4 Zusammenfassung scanf() | 59 | ||
6 Formatierte Ausgabe mit printf | 62 | ||
7 Elementare Datentypen | 64 | ||
7.1 Der Datentyp int (Integer) | 64 | ||
7.2 Variablen deklarieren | 65 | ||
7.3 C versus C++ bei der Deklaration von Variablen | 69 | ||
7.4 Der Datentyp long | 69 | ||
7.5 Der Datentyp short | 70 | ||
7.6 Die Gleitpunkttypen float und double | 71 | ||
7.7 Numerische Gleitpunktprobleme | 77 | ||
7.8 Der Datentyp char | 78 | ||
7.9 Nationale contra internationale Zeichensätze | 83 | ||
7.10 Vorzeichenlos und vorzeichenbehaftet | 84 | ||
7.11 Limits für Ganzzahl- und Gleitpunktdatentypen | 86 | ||
7.12 Konstanten | 89 | ||
7.13 Umwandlungsvorgaben für formatierte Ein-/ Ausgabe | 91 | ||
8 Operatoren | 98 | ||
8.1 Exkurs zu Operatoren | 98 | ||
8.2 Arithmetische Operatoren | 99 | ||
8.3 Erweiterte Darstellung arithmetischer Operatoren | 102 | ||
8.4 Inkrement- und Dekrement-Operatoren | 103 | ||
8.5 Bit-Operatoren | 104 | ||
8.6 sizeof-Operator | 112 | ||
9 Typenumwandlung | 116 | ||
10 Kontrollstrukturen | 118 | ||
10.1 Verzweigungen mit der if-Bedingung | 118 | ||
10.2 Die Verzweigung mit else if | 123 | ||
10.3 Die Verzweigung mit else | 124 | ||
10.4 Der !-Operator (logischer Operator) | 128 | ||
10.5 Logisches UND (&&) – Logisches ODER (||) | 130 | ||
10.6 Bedingungsoperator ?: | 133 | ||
10.7 Fallunterscheidung: die switch- Verzweigung | 135 | ||
10.8 Die while-Schleife | 139 | ||
10.9 Die do while-Schleife | 143 | ||
10.10 Die for-Schleife | 147 | ||
10.11 Kontrollierte Sprünge | 154 | ||
10.12 Direkte Sprünge mit goto | 156 | ||
10.13 Notationsstil | 157 | ||
11 Funktionen | 160 | ||
11.1 Was sind Funktionen? | 160 | ||
11.2 Wozu Funktionen? | 160 | ||
11.3 Definition von Funktionen | 160 | ||
11.4 Funktionsaufruf | 161 | ||
11.5 Funktionsdeklaration | 163 | ||
11.6 Lokale Variablen | 164 | ||
11.7 Globale Variablen | 167 | ||
11.8 Statische Variablen | 168 | ||
11.9 Schlüsselworte für Variablen – Speicherklassen | 169 | ||
11.10 Typ-Qualifizierer | 171 | ||
11.11 Geltungsbereich von Variablen | 172 | ||
11.12 Speicherklassen-Spezifizierer für Funktionen | 173 | ||
11.13 Datenaustausch zwischen Funktionen | 174 | ||
11.14 Wertübergabe an Funktionen (call-by-value) | 175 | ||
11.15 Rückgabewert von Funktionen | 179 | ||
11.16 Die Hauptfunktion main() | 180 | ||
11.17 Rückgabewert beim Beenden eines Programms | 182 | ||
11.18 Funktionen der Laufzeitbibliothek | 183 | ||
11.19 Getrenntes Compilieren von Quelldateien | 184 | ||
11.20 Rekursive Funktionen | 186 | ||
12 Präprozessor-Direktiven | 200 | ||
12.1 Einkopieren von Dateien mittels #include | 200 | ||
12.2 Makros und Konstanten – #define | 204 | ||
12.3 Bedingte Kompilierung | 212 | ||
12.4 Vordefinierte Präprozessor-Direktiven (ANSI C) | 218 | ||
12.5 Ersetzung eines Makroparameters durch einen String | 220 | ||
12.6 #undef – Makronamen wieder aufheben | 221 | ||
12.7 Ausgeben von Fehlermeldungen – #error | 222 | ||
12.8 #pragma | 223 | ||
13 Arrays | 224 | ||
13.1 Arrays deklarieren | 224 | ||
13.2 Initialisierung und Zugriff auf Arrays | 225 | ||
13.3 Arrays vergleichen | 232 | ||
13.4 Anzahl der Elemente eines Arrays ermitteln | 234 | ||
13.5 Übergabe von Arrays an Funktionen | 235 | ||
13.6 Arrays aus Funktionen zurückgeben | 237 | ||
13.7 Programmbeispiel zu den Arrays | 238 | ||
13.8 Einlesen von Array- Werten | 242 | ||
13.9 Mehrdimensionale Arrays | 243 | ||
13.10 Mehrdimensionale Arrays initialisieren | 243 | ||
13.11 Übergabe von zwei- bzw. mehrdimensionalen Arrays an Funktionen | 257 | ||
13.12 Arrays in Tabellenkalkulation einlesen (*. CSV- Dateien) | 259 | ||
13.13 Strings/Zeichenketten (char Array) | 260 | ||
13.14 Einlesen von Strings | 267 | ||
13.15 Standard-Bibliothek |
269 | ||
14 Zeiger (Pointer) | 282 | ||
14.1 Zeiger deklarieren | 282 | ||
14.2 Zeiger initialisieren | 283 | ||
14.3 Zeigerarithmetik | 296 | ||
14.4 Zeiger, die auf andere Zeiger verweisen | 296 | ||
14.5 Typensicherung bei der Dereferenzierung | 299 | ||
14.6 Zeiger als Funktionsparameter ( call- by- reference) | 299 | ||
14.7 Array und Zeiger | 306 | ||
14.8 Zeiger auf Strings | 314 | ||
14.9 Zeiger auf Zeiger und Stringtabellen | 316 | ||
14.10 Zeiger auf Funktionen | 326 | ||
14.11 void- Zeiger | 332 | ||
14.12 Äquivalenz zwischen Zeigern und Arrays | 335 | ||
15 Kommandozeilenargumente | 340 | ||
15.1 Argumente an die Hauptfunktion | 340 | ||
15.2 Optionen (Schalter) aus der Kommandozeile auswerten | 346 | ||
16 Dynamische Speicherverwaltung | 352 | ||
16.1 Das Speicherkonzept | 352 | ||
16.2 Speicheralloziierung mit malloc() | 353 | ||
16.3 Die Mysterie von NULL | 357 | ||
16.4 Speicherreservierung und ihre Probleme | 360 | ||
16.5 free() – Speicher wieder freigeben | 361 | ||
16.6 Die Freispeicherverwaltung | 364 | ||
16.7 Dynamisches Array | 368 | ||
16.8 Speicher dynamisch reservieren mit realloc und calloc | 372 | ||
16.9 Speicher vom Stack anfordern mit alloca (nicht ANSI C) | 376 | ||
16.10 free – Speicher wieder freigeben | 376 | ||
16.11 Zweidimensionale dynamische Arrays | 377 | ||
16.12 Wenn die Speicheralloziierung fehlschlägt | 380 | ||
17 Strukturen | 386 | ||
17.1 Struktur deklarieren | 386 | ||
17.2 Initialisierung und Zugriff auf Strukturen | 387 | ||
17.3 Strukturen als Wertübergabe an eine Funktion | 392 | ||
17.4 Strukturen als Rückgabewert einer Funktion | 394 | ||
17.5 Strukturen vergleichen | 396 | ||
17.6 Arrays von Strukturen | 398 | ||
17.7 Strukturen in Strukturen (Nested Structures) | 405 | ||
17.8 Kurze Zusammenfassung zu den Strukturen | 416 | ||
17.9 Union | 417 | ||
17.10 Aufzählungstyp enum | 422 | ||
17.11 Typendefinition mit typedef | 425 | ||
17.12 Attribute von Strukturen verändern (nicht ANSI C) | 429 | ||
17.13 Bitfelder | 432 | ||
17.14 Das offsetof-Makro | 439 | ||
18 Ein-/Ausgabe-Funktionen | 442 | ||
18.1 Was ist eine Datei? | 442 | ||
18.2 Formatierte und unformatierte Ein-/Ausgabe | 442 | ||
18.3 Streams | 443 | ||
18.4 Höhere Ein-/Ausgabe-Funktionen | 443 | ||
18.5 Datei (Stream) öffnen – fopen | 444 | ||
18.6 Zeichenweise Lesen und Schreiben – getchar und putchar | 450 | ||
18.7 Zeichenweise Lesen und Schreiben – putc/fputc und getc/ fgetc | 454 | ||
18.8 Datei (Stream) schließen – fclose | 460 | ||
18.9 Formatiertes Einlesen/Ausgeben von Streams mit fprintf und fscanf | 463 | ||
18.10 Standard-Streams in C | 468 | ||
18.11 Fehlerbehandlung von Streams – feof, ferror und clearerr | 471 | ||
18.12 Gelesenes Zeichen in die Eingabe zurückschieben – ungetc | 473 | ||
18.13 ( Tastatur-)Puffer leeren – fflush | 475 | ||
18.14 Stream positionieren – fseek, rewind und ftell | 477 | ||
18.15 Stream positionieren – fsetpos, fgetpos | 481 | ||
18.16 Zeilenweise Ein-/Ausgabe von Streams | 482 | ||
18.17 Blockweise Lesen und Schreiben – fread und fwrite | 497 | ||
18.18 Datei (Stream) erneut öffnen – freopen | 507 | ||
18.19 Datei löschen oder umbenennen – remove und rename | 508 | ||
18.20 Pufferung einstellen – setbuf und setvbuf | 511 | ||
18.21 Temporäre Dateien erzeugen – tmpfile und tmpnam | 517 | ||
18.22 Fehlerausgabe mit strerror und perror | 522 | ||
18.23 Formatiert in einem String schreiben und formatiert aus einem String lesen – sscanf und sprintf | 526 | ||
18.24 Fortgeschrittenes Thema | 530 | ||
18.25 Low-Level-Datei-I/O-Funktionen (nicht ANSI C) | 538 | ||
18.26 Datei öffnen – open | 539 | ||
18.27 Datei schließen – close | 546 | ||
18.28 Datei erzeugen – creat | 547 | ||
18.29 Schreiben und Lesen – write und read | 548 | ||
18.30 File-Deskriptor positionieren – lseek | 559 | ||
18.31 File-Deskriptor von einem Stream – fileno | 560 | ||
18.32 Stream von File-Deskriptor – fdopen | 561 | ||
19 Attribute von Dateien und Arbeiten mit Verzeichnissen ( nicht ANSI C) | 564 | ||
19.1 Attribute einer Datei ermitteln – stat() | 564 | ||
19.2 Prüfen des Zugriffsrechts – access | 581 | ||
19.3 Verzeichnis-Funktionen | 584 | ||
20 Arbeiten mit variablen langen Argumentlisten – < stdarg. h> | 598 | ||
20.1 Makros in |
598 | ||
20.2 Argumentliste am Anfang oder Ende kennzeichnen | 599 | ||
20.3 vprintf, vsprintf und vfsprintf | 603 | ||
21 Zeitroutinen | 608 | ||
21.1 Die Headerdatei |
608 | ||
21.2 Laufzeitmessung (Profiling) | 619 | ||
22 Weitere Headerdateien und ihre Funktionen ( ANSI C) | 622 | ||
22.1 |
622 | ||
22.2 |
624 | ||
22.3 Mathematische Funktionen – |
627 | ||
22.4 |
629 | ||
22.5 |
646 | ||
22.6 |
649 | ||
22.7 |
654 | ||
22.8 |
659 | ||
22.9 Erweiterter ANSI C-Standard (ANSI C99) | 663 | ||
23 Dynamische Datenstrukturen | 672 | ||
23.1 Lineare Listen (einfach verkettete Listen) | 672 | ||
23.2 Doppelt verkettete Listen | 699 | ||
23.3 Stacks nach dem LIFO (Last-in-First-out)-Prinzip | 716 | ||
23.4 Queues nach dem FIFO-Prinzip | 738 | ||
24 Algorithmen | 748 | ||
24.1 Was sind Algorithmen? | 748 | ||
24.2 Wie setze ich Algorithmen ein? | 748 | ||
24.3 Sortieralgorithmen | 749 | ||
24.4 Suchalgorithmen – Grundlage zur Suche | 775 | ||
24.5 Hashing (Zerhacken) | 805 | ||
24.6 String-Matching | 816 | ||
24.7 Pattern Matching (reguläre Ausdrücke) | 827 | ||
24.8 Backtracking | 834 | ||
25 Sicheres Programmieren | 858 | ||
25.1 Buffer Overflow (Speicherüberlauf) | 859 | ||
25.2 Memory Leaks (Speicherlecks) | 877 | ||
25.3 Tipps zu Sicherheitsproblemen | 882 | ||
26 CGI mit C | 884 | ||
26.1 Was ist CGI? | 884 | ||
26.2 Vorteile von CGIs in C | 884 | ||
26.3 Andere Techniken der Webprogrammierung | 885 | ||
26.4 Das dreistufige Webanwendungsdesign | 886 | ||
26.5 Clientseitige Programmierung | 888 | ||
26.6 Serverseitige Programmierung | 888 | ||
26.7 Der Webserver | 889 | ||
26.8 Das HTTP-Protokoll | 902 | ||
26.9 Das Common Gateway Interface (CGI) | 912 | ||
26.10 HTML-Formulare | 921 | ||
26.11 CGI-Eingabe | 928 | ||
26.12 Ein Gästebuch | 937 | ||
26.13 Ausblick | 950 | ||
27 MySQL und C | 952 | ||
27.1 Aufbau eines Datenbanksystems | 952 | ||
27.2 MySQL installieren | 957 | ||
27.3 Crashkurs (My)SQL | 959 | ||
27.4 Die MySQL C-API | 972 | ||
27.5 MySQL und C mit CGI | 1004 | ||
27.6 Funktionsübersicht | 1023 | ||
27.7 Datentypenübersicht der C-API | 1026 | ||
28 Netzwerkprogrammierung und Cross- Plattform- Entwicklung | 1028 | ||
28.1 Begriffe zur Netzwerktechnik | 1028 | ||
28.2 Headerdateien zur Socketprogrammierung | 1034 | ||
28.3 Client-/Server-Prinzip | 1037 | ||
28.4 Erstellen einer Client-Anwendung | 1038 | ||
28.5 Erstellen einer Server-Anwendung | 1049 | ||
28.6 (Cross-Plattform)TCP-Echo-Server | 1055 | ||
28.7 Cross-Plattform-Development | 1062 | ||
28.8 Weitere Anmerkungen zur Netzwerkprogrammierung | 1087 | ||
29 Wie geht’s jetzt weiter? | 1092 | ||
29.1 GUI-Programmierung – Grafische Oberflächen | 1092 | ||
A Anhang | 1096 | ||
A. 1 Rangfolge der Operatoren | 1096 | ||
A.2 ASCII-Code- Tabelle | 1098 | ||
A.3 Reservierte Schlüsselwörter in C | 1099 | ||
A.4 Standard-Headerdateien der ANSI C-Bibliothek | 1099 | ||
A.5 Weiterführende Links | 1099 | ||
A.6 Weiterführende Literatur | 1099 | ||
Index | 1104 |