Rheinwerk Computing / C von A bis Z
Das umfassende Handbuch für C-Programmierer. Zum Lernen und Nachschlagen. Aktuell zum Standard C18. Aktuell zu C18. Alle Beispielprojekte zum Download
Unser beliebter Klassiker neu aufgelegt! Zum aktuellen Standard und mit einem Autorenteam aus Praxis und Lehre. Ansonsten bleibt aus gutem Grund vieles beim Alten. Lassen Sie sich umfassend einführen oder nutzen Sie das Buch als Nachschlagewerk. Von den...
Leider schon ausverkauft
Buch (Gebunden)
- Lastschrift, Kreditkarte, Paypal, Rechnung
- Kostenlose Rücksendung
Produktdetails
Produktinformationen zu „Rheinwerk Computing / C von A bis Z “
Klappentext zu „Rheinwerk Computing / C von A bis Z “
Unser beliebter Klassiker neu aufgelegt! Zum aktuellen Standard und mit einem Autorenteam aus Praxis und Lehre. Ansonsten bleibt aus gutem Grund vieles beim Alten. Lassen Sie sich umfassend einführen oder nutzen Sie das Buch als Nachschlagewerk. Von den Grundlagen über die dynamische Speicherverwaltung bis zur plattformübergreifenden Entwicklung. Randvoll mit hilfreichen Beispielen und Praxistipps - C-Wissen pur!Aus dem Inhalt:
- Datenstrukturen
- Algorithmen
- Sicherheit
- Dynamische Speicherverwaltung
- Netzwerkprogrammierung
- Cross-Plattform-Entwicklung
- Parallele Programmierung
- Auf Datenbanken zugreifen
- Codebeispiele und Praxistipps
Inhaltsverzeichnis zu „Rheinwerk Computing / C von A bis Z “
Materialien zum Buch ... 23
Vorwort ... 25
Vorwort des Gutachters ... 29
1. Einstieg in C ... 31
1.1 ... Übersicht zu C ... 31
1.2 ... Der ANSI-C-Standard ... 33
1.3 ... Der POSIX-Standard ... 36
1.4 ... Vor- und Nachteile der Programmiersprache C ... 37
1.5 ... C in diesem Buch ... 39
1.6 ... Was benötigen Sie für C? ... 39
1.7 ... Welcher Compiler und welches Betriebssystem? ... 41
1.8 ... Unterschiede zwischen Windows und Linux ... 42
1.9 ... Eine Programmierumgebung einrichten -- Code::Blocks für Windows ... 42
1.10 ... Eine Programmierumgebung einrichten -- Nano/GCC für Linux ... 51
2. Eine günstige Programmierplattform -- der Raspberry Pi ... 53
2.1 ... Was genau ist der Raspberry Pi? ... 53
2.2 ... Installation eines Linux-Betriebssystems am Beispiel von Raspbian ... 57
2.3 ... Die Konfiguration des Raspberry Pi im Detail ... 66
2.4 ... Das Tool raspi-config ... 66
3. Das erste Programm ... 73
3.1 ... Was leistet der Editor? ... 74
3.2 ... Was leistet der Compiler? ... 74
3.3 ... Was sind Include-Dateien und wozu benötigt man sie? ... 75
3.4 ... Das erste Programm -- die Ausgabe eines Textes in der Konsole ... 75
3.5 ... Das Hallo-Welt-Programm im Detail ... 76
3.6 ... Wie kompiliert man ein Programm und führt es anschließend aus? ... 79
4. Grundlagen ... 81
4.1 ... Symbole ... 81
4.2 ... Zeichensätze ... 88
4.3 ... Strings ... 93
4.4 ... Das Einführungsbeispiel mit Strings ... 94
5. Basisdatentypen ... 95
5.1 ... Was ist ein Byte und wie werden Zahlen in C gespeichert? ... 95
5.2 ... Was ist eine Variable und was ist ein Variablentyp? ... 96
5.3 ... Was ist ein Operand? ... 97
5.4 ... Was ist ein Parameter? ... 97
5.5 ... Wie speichert ein
... mehr
Prozessor Variablen, Parameter und Operanden? ... 97
5.6 ... Was sind Speicheradressen und warum sind sie wichtig für C? ... 97
5.7 ... Deklaration und Definition von Variablen ... 98
5.8 ... Array-Datentypen (Datenfelder) ... 99
5.9 ... Standard-Datentypen ... 100
5.10 ... Ganzzahlige Typen mit vorgegebener Breite -- ... 107
5.11 ... Die Gleitpunkttypen »float« und »double«, Größe 4 oder 8 Byte ... 110
5.12 ... Komplexe Gleitpunkttypen -- ... 118
5.13 ... Der Datentyp »char«, Standardgröße 1 Byte ... 120
5.14 ... Nationale contra internationale Zeichensätze ... 126
5.15 ... Boolesche Werte -- ... 129
5.16 ... Der Unterschied zwischen vorzeichenlosen und vorzeichenbehafteten Zahlen ... 131
5.17 ... Limits für Ganzzahl- und Gleitpunktdatentypen ... 133
5.18 ... Der Typ »void« ... 136
5.19 ... Numerische Konstanten ... 137
5.20 ... Umwandlungsvorgaben für formatierte Ein-/Ausgabe ... 139
6. Formatierte Ein-/Ausgabe mit »scanf()« und »printf()« ... 147
6.1 ... Formatierte Eingabe mit »scanf()« ... 147
6.2 ... Formatierte Ausgabe mit »printf()« ... 157
7. Operatoren ... 161
7.1 ... Was sind Operatoren und wozu benötigt man sie in C? ... 161
7.2 ... Arithmetische Operatoren ... 162
7.3 ... Erweiterte Darstellung arithmetischer Operatoren ... 165
7.4 ... Inkrement- und Dekrement-Operatoren ... 167
7.5 ... Bit-Operatoren ... 168
7.6 ... Makros für logische Operatoren und Bit-Operatoren -- ... 177
7.7 ... Der »sizeof«-Operator ... 178
8. Typumwandlung ... 181
8.1 ... Automatische implizite Datentypumwandlung durch den C-Compiler ... 181
8.2 ... Wozu benötigt man das benutzerdefinierte explizite Typecasting? ... 186
8.3 ... Explizite Datentypumwandlung mit Typecasting an Beispielen ... 186
9. Kontrollstrukturen ... 189
9.1 ... Verzweigungen mit der »if«-Bedingung ... 190
9.2 ... Die Verzweigung mit »else if« ... 194
9.3 ... Die Verzweigung mit »else« ... 196
9.4 ... Der !-Operator (logischer NOT-Operator) ... 200
9.5 ... Logisches UND (&&) -- logisches ODER (||) ... 202
9.6 ... Der Bedingungsoperator »?:« ... 205
9.7 ... Fallunterscheidung: die »switch«-Verzweigung ... 207
9.8 ... Die »while«-Schleife ... 212
9.9 ... Die »do while«-Schleife ... 216
9.10 ... Die »for«-Schleife ... 221
9.11 ... Kontrollierter Ausstieg aus Schleifen mit »break« ... 229
9.12 ... Direkte Sprünge mit »goto« -- und warum man sie nicht verwenden sollte ... 231
9.13 ... Einige Anmerkungen zum Notationsstil ... 232
9.14 ... Einige Anmerkungen zu einem guten Programmierstil ... 234
10. Funktionen ... 235
10.1 ... Was sind Funktionen? ... 235
10.2 ... Wozu dienen Funktionen? ... 236
10.3 ... Definition von Funktionen ... 236
10.4 ... Funktionsaufruf ... 237
10.5 ... Funktionsdeklaration ... 238
10.6 ... Lokale Variablen ... 241
10.7 ... Globale Variablen ... 243
10.8 ... Statische Variablen ... 245
10.9 ... Schlüsselwörter für Variablen -- Speicherklassen ... 246
10.10 ... Typ-Qualifizierer ... 247
10.11 ... Geltungsbereich von Variablen ... 248
10.12 ... Speicherklassen-Spezifizierer für Funktionen ... 250
10.13 ... Datenaustausch zwischen Funktionen ... 250
10.14 ... Wertübergabe an Funktionen (Call-by-Value) ... 252
10.15 ... Der Rückgabewert von Funktionen ... 256
10.16 ... Die Hauptfunktion »main()« ... 258
10.17 ... Was bedeutet der Rückgabewert beim Beenden eines Programms? ... 260
10.18 ... Funktionen der Laufzeitbibliothek ... 264
10.19 ... Getrenntes Kompilieren von Quelldateien ... 264
10.20 ... Rekursive Funktionen (Rekursion) ... 267
10.21 ... »inline«-Funktionen ... 280
11. Präprozessor-Direktiven ... 283
11.1 ... Mit »#include« Dateien einbinden ... 284
11.2 ... Wichtige vordefinierte Headerdateien für C ... 285
11.3 ... Makros und Konstanten -- »#define« ... 287
11.4 ... Bedingte Kompilierung mit »#ifdef« ... 296
11.5 ... Vordefinierte Präprozessor-Direktiven (ANSI C) ... 301
11.6 ... Einen Makroparameter durch einen String ersetzen ... 304
11.7 ... »#undef« -- Makronamen wieder aufheben ... 305
11.8 ... Fehlermeldungen ausgeben mit »#error« ... 306
11.9 ... »#pragma« (gilt nur für Windows) ... 307
12. Arrays ... 309
12.1 ... Arrays deklarieren ... 309
12.2 ... Initialisierung und Zugriff auf Arrays ... 311
12.3 ... Arrays vergleichen ... 318
12.4 ... Anzahl der Elemente eines Arrays ermitteln ... 320
12.5 ... Übergabe von Arrays an Funktionen ... 321
12.6 ... Arrays aus Funktionen zurückgeben ... 324
12.7 ... Programmbeispiel zu Arrays ... 325
12.8 ... Array-Werte über die Tastatur einlesen ... 328
12.9 ... Mehrdimensionale Arrays ... 329
12.10 ... Arrays in eine Tabellenkalkulation einlesen (CSV-Dateien) ... 345
12.11 ... Strings/Zeichenketten (»char«-Array) ... 346
12.12 ... Einlesen von Strings ... 353
12.13 ... Die Standard-Bibliothek ... 356
13. Zeiger (Pointer) ... 369
13.1 ... Der Unterschied zwischen einer normalen Variablen und einem Zeiger ... 369
13.2 ... Zeiger deklarieren ... 370
13.3 ... Zeiger initialisieren ... 371
13.4 ... Zeigerarithmetik ... 385
13.5 ... Zeiger, die auf andere Zeiger verweisen ... 386
13.6 ... Typensicherung bei der Dereferenzierung ... 389
13.7 ... Zeiger als Funktionsparameter (Call-by-Reference) ... 389
13.8 ... Array und Zeiger ... 396
13.9 ... Zeiger auf Strings ... 403
13.10 ... Zeiger auf Zeiger und Stringtabellen ... 405
13.11 ... Zeiger auf Funktionen ... 414
13.12 ... void-Zeiger ... 420
13.13 ... Äquivalenz zwischen Zeigern und Arrays ... 423
13.14 ... Der »restrict«-Zeiger ... 426
14. Kommandozeilenargumente ... 429
14.1 ... Argumente an die Hauptfunktion übergeben ... 430
14.2 ... Argumente aus der Kommandozeile auswerten ... 435
15. Dynamische Speicherverwaltung ... 441
15.1 ... Das Speicherkonzept ... 442
15.2 ... Speicherallokation mit »malloc()« ... 444
15.3 ... Das NULL-Mysterium ... 447
15.4 ... Speicherreservierung und ihre Probleme ... 450
15.5 ... »free()« -- Speicher wieder freigeben ... 452
15.6 ... Dynamische Arrays ... 460
15.7 ... Speicher dynamisch reservieren mit »realloc()« und »calloc()« ... 464
15.8 ... Speicher vom Stack anfordern mit »alloca()« (nicht ANSI C) ... 468
15.9 ... Ergänzende Anmerkungen zu »free()« ... 468
15.10 ... Zweidimensionale dynamische Arrays ... 469
15.11 ... Was muss man tun, wenn die Speicherallokation fehlschlägt? ... 472
16. Strukturen ... 479
16.1 ... Benutzerdefinierte Typendefinitionen mit »typedef« ... 479
16.2 ... Was ist ein strukturierter Datentyp und wozu benötigt man ihn in C? ... 480
16.3 ... Strukturen mit »typedef struct« deklarieren ... 480
16.4 ... Initialisierung und Zugriff auf Strukturen ... 482
16.5 ... Strukturen als Wertübergabe an eine Funktion benutzen ... 491
16.6 ... Strukturen als Rückgabewert einer Funktion benutzen ... 493
16.7 ... Strukturen miteinander vergleichen ... 496
16.8 ... Arrays von Strukturen erstellen ... 497
16.9 ... Strukturen in Strukturen (Nested Structures) ... 504
16.10 ... Weitere spezielle Datentypen ... 514
16.11 ... Attribute von Strukturen verändern ... 525
16.12 ... Bitfelder ... 529
16.13 ... Das »offsetof«-Makro ... 536
17. Ein-/Ausgabe-Funktionen ... 539
17.1 ... Was ist eine Datei aus Sicht der Programmiersprache C? ... 539
17.2 ... Formatierte und unformatierte Ein-/Ausgabe ... 540
17.3 ... Höhere Ein-/Ausgabe-Funktionen mit ... 540
17.4 ... Streams (Ein-/Ausgabe-Datenströme) ... 568
17.5 ... Spezielle Ein-/Ausgabe-Funktionen für Streams ... 597
17.6 ... Low-Level-Datei-I/O-Funktionen (nicht ANSI C) ... 643
18. Attribute von Dateien und das Arbeiten mit Verzeichnissen (nicht ANSI C) ... 673
18.1 ... Die Attribute einer Datei mit »stat()« ermitteln ... 673
18.2 ... Prüfen des Zugriffsrechts mit »access()« ... 691
18.3 ... Verzeichnisfunktionen ... 693
19. Arbeiten mit variabel langen Argumentlisten -- ... 707
19.1 ... Was ist eine Ellipse und wie werden mit ihr Parameter übergeben? ... 707
19.2 ... Wie kann man mit die Parameterliste abfragen? ... 708
19.3 ... Makros in -- »va_list«, »va_arg«, »va_start« und »va_end« ... 708
19.4 ... Die Argumentliste am Anfang oder Ende kennzeichnen ... 709
19.5 ... »vprintf()«, »vsprintf()«, »vfsprintf()« und »vsnsprintf()« ... 714
19.6 ... Variadic Makros -- __VA_ARGS__ ... 719
20. Zeitroutinen ... 723
20.1 ... Die Headerdatei ... 723
20.2 ... Laufzeitmessung (Profiling) ... 735
20.3 ... Besonderheiten beim Raspberry Pi ... 737
21. Weitere Headerdateien und ihre Funktionen (ANSI C) ... 739
21.1 ... Testmöglichkeiten und Fehlersuche -- ... 739
21.2 ... Zeichenklassifizierung und Umwandlung -- ... 741
21.3 ... Mathematische Funktionen -- , und ... 746
21.4 ... Einige nützliche Funktionen in ... 759
21.5 ... Länderspezifische Eigenheiten -- ... 779
21.6 ... Nichtlokale Sprünge -- ... 783
21.7 ... Einige nützliche Funktionen in ... 787
21.8 ... Die »mem...«-Funktionen zur Speichermanipulation -- ... 792
22. Dynamische Datenstrukturen ... 797
22.1 ... Lineare Listen (einfach verkettete Listen) ... 797
22.2 ... Doppelt verkettete Listen ... 831
22.3 ... Stacks nach dem LIFO-(Last-in-first-out-)Prinzip ... 849
22.4 ... Queues nach dem FIFO-Prinzip ... 869
22.5 ... Dynamisches Array mit flexiblen Elementen ... 878
23. Algorithmen ... 881
23.1 ... Was sind Algorithmen? ... 881
23.2 ... Beispiele für Algorithmen ... 883
24. MySQL und C ... 989
24.1 ... Aufbau eines Datenbanksystems ... 989
24.2 ... MySQL installieren ... 995
24.3 ... Crashkurs SQL ... 999
24.4 ... Die MySQL-C-API ... 1014
24.5 ... MySQL und C mit CGI ... 1045
24.6 ... Funktionsübersicht ... 1063
24.7 ... Datentypenübersicht der C-API ... 1066
24.8 ... Weiterführende Literatur zu Datenbanken ... 1067
25. Netzwerkprogrammierung und Cross-Plattform-Entwicklung ... 1069
25.1 ... Begriffe zur Netzwerktechnik ... 1070
25.2 ... Was sind Sockets und wie legt man sie in C an? ... 1076
25.3 ... Headerdateien für die Netzwerkprogrammierung ... 1077
25.4 ... Das Client-Server-Prinzip ... 1080
25.5 ... Erstellen einer Client-Anwendung ... 1082
25.6 ... Erstellen einer Server-Anwendung ... 1092
25.7 ... Ein einfacher TCP-Echo-Server ... 1098
25.8 ... Cross-Plattform-Development ... 1105
25.9 ... Weitere Anmerkungen zur Netzwerkprogrammierung und Literaturempfehlungen ... 1128
26. Paralleles Rechnen ... 1135
26.1 ... Was ist Multitasking und wie wird es realisiert? ... 1135
26.2 ... Braucht man spezielle Prozessoren für Multitasking? ... 1136
26.3 ... Braucht man spezielle Multitasking-Betriebssysteme? ... 1139
26.4 ... Programmiertechniken der Parallelisierung ... 1139
26.5 ... Vom Prozess zum Thread ... 1140
26.6 ... Mit POSIX-Threads programmieren ... 1144
27. Sicheres Programmieren ... 1153
27.1 ... Buffer Overflow (Speicherüberlauf) ... 1154
27.2 ... Stack Overflow (Stapelüberlauf) ... 1172
27.3 ... Memory Leaks (Speicherlecks) ... 1174
27.4 ... Weiterführende Literatur zu sicherem Programmieren ... 1180
28. Wie geht's jetzt weiter? ... 1181
28.1 ... GUI-Programmierung -- grafische Oberflächen ... 1182
28.2 ... Grafikprogrammierung unter Windows ... 1185
28.3 ... Grafikprogrammierung unter Linux (Beispiel Raspberry Pi) ... 1197
Anhang ... 1207
A ... Operatoren ... 1207
Index ... 1213
5.6 ... Was sind Speicheradressen und warum sind sie wichtig für C? ... 97
5.7 ... Deklaration und Definition von Variablen ... 98
5.8 ... Array-Datentypen (Datenfelder) ... 99
5.9 ... Standard-Datentypen ... 100
5.10 ... Ganzzahlige Typen mit vorgegebener Breite -- ... 107
5.11 ... Die Gleitpunkttypen »float« und »double«, Größe 4 oder 8 Byte ... 110
5.12 ... Komplexe Gleitpunkttypen -- ... 118
5.13 ... Der Datentyp »char«, Standardgröße 1 Byte ... 120
5.14 ... Nationale contra internationale Zeichensätze ... 126
5.15 ... Boolesche Werte -- ... 129
5.16 ... Der Unterschied zwischen vorzeichenlosen und vorzeichenbehafteten Zahlen ... 131
5.17 ... Limits für Ganzzahl- und Gleitpunktdatentypen ... 133
5.18 ... Der Typ »void« ... 136
5.19 ... Numerische Konstanten ... 137
5.20 ... Umwandlungsvorgaben für formatierte Ein-/Ausgabe ... 139
6. Formatierte Ein-/Ausgabe mit »scanf()« und »printf()« ... 147
6.1 ... Formatierte Eingabe mit »scanf()« ... 147
6.2 ... Formatierte Ausgabe mit »printf()« ... 157
7. Operatoren ... 161
7.1 ... Was sind Operatoren und wozu benötigt man sie in C? ... 161
7.2 ... Arithmetische Operatoren ... 162
7.3 ... Erweiterte Darstellung arithmetischer Operatoren ... 165
7.4 ... Inkrement- und Dekrement-Operatoren ... 167
7.5 ... Bit-Operatoren ... 168
7.6 ... Makros für logische Operatoren und Bit-Operatoren -- ... 177
7.7 ... Der »sizeof«-Operator ... 178
8. Typumwandlung ... 181
8.1 ... Automatische implizite Datentypumwandlung durch den C-Compiler ... 181
8.2 ... Wozu benötigt man das benutzerdefinierte explizite Typecasting? ... 186
8.3 ... Explizite Datentypumwandlung mit Typecasting an Beispielen ... 186
9. Kontrollstrukturen ... 189
9.1 ... Verzweigungen mit der »if«-Bedingung ... 190
9.2 ... Die Verzweigung mit »else if« ... 194
9.3 ... Die Verzweigung mit »else« ... 196
9.4 ... Der !-Operator (logischer NOT-Operator) ... 200
9.5 ... Logisches UND (&&) -- logisches ODER (||) ... 202
9.6 ... Der Bedingungsoperator »?:« ... 205
9.7 ... Fallunterscheidung: die »switch«-Verzweigung ... 207
9.8 ... Die »while«-Schleife ... 212
9.9 ... Die »do while«-Schleife ... 216
9.10 ... Die »for«-Schleife ... 221
9.11 ... Kontrollierter Ausstieg aus Schleifen mit »break« ... 229
9.12 ... Direkte Sprünge mit »goto« -- und warum man sie nicht verwenden sollte ... 231
9.13 ... Einige Anmerkungen zum Notationsstil ... 232
9.14 ... Einige Anmerkungen zu einem guten Programmierstil ... 234
10. Funktionen ... 235
10.1 ... Was sind Funktionen? ... 235
10.2 ... Wozu dienen Funktionen? ... 236
10.3 ... Definition von Funktionen ... 236
10.4 ... Funktionsaufruf ... 237
10.5 ... Funktionsdeklaration ... 238
10.6 ... Lokale Variablen ... 241
10.7 ... Globale Variablen ... 243
10.8 ... Statische Variablen ... 245
10.9 ... Schlüsselwörter für Variablen -- Speicherklassen ... 246
10.10 ... Typ-Qualifizierer ... 247
10.11 ... Geltungsbereich von Variablen ... 248
10.12 ... Speicherklassen-Spezifizierer für Funktionen ... 250
10.13 ... Datenaustausch zwischen Funktionen ... 250
10.14 ... Wertübergabe an Funktionen (Call-by-Value) ... 252
10.15 ... Der Rückgabewert von Funktionen ... 256
10.16 ... Die Hauptfunktion »main()« ... 258
10.17 ... Was bedeutet der Rückgabewert beim Beenden eines Programms? ... 260
10.18 ... Funktionen der Laufzeitbibliothek ... 264
10.19 ... Getrenntes Kompilieren von Quelldateien ... 264
10.20 ... Rekursive Funktionen (Rekursion) ... 267
10.21 ... »inline«-Funktionen ... 280
11. Präprozessor-Direktiven ... 283
11.1 ... Mit »#include« Dateien einbinden ... 284
11.2 ... Wichtige vordefinierte Headerdateien für C ... 285
11.3 ... Makros und Konstanten -- »#define« ... 287
11.4 ... Bedingte Kompilierung mit »#ifdef« ... 296
11.5 ... Vordefinierte Präprozessor-Direktiven (ANSI C) ... 301
11.6 ... Einen Makroparameter durch einen String ersetzen ... 304
11.7 ... »#undef« -- Makronamen wieder aufheben ... 305
11.8 ... Fehlermeldungen ausgeben mit »#error« ... 306
11.9 ... »#pragma« (gilt nur für Windows) ... 307
12. Arrays ... 309
12.1 ... Arrays deklarieren ... 309
12.2 ... Initialisierung und Zugriff auf Arrays ... 311
12.3 ... Arrays vergleichen ... 318
12.4 ... Anzahl der Elemente eines Arrays ermitteln ... 320
12.5 ... Übergabe von Arrays an Funktionen ... 321
12.6 ... Arrays aus Funktionen zurückgeben ... 324
12.7 ... Programmbeispiel zu Arrays ... 325
12.8 ... Array-Werte über die Tastatur einlesen ... 328
12.9 ... Mehrdimensionale Arrays ... 329
12.10 ... Arrays in eine Tabellenkalkulation einlesen (CSV-Dateien) ... 345
12.11 ... Strings/Zeichenketten (»char«-Array) ... 346
12.12 ... Einlesen von Strings ... 353
12.13 ... Die Standard-Bibliothek ... 356
13. Zeiger (Pointer) ... 369
13.1 ... Der Unterschied zwischen einer normalen Variablen und einem Zeiger ... 369
13.2 ... Zeiger deklarieren ... 370
13.3 ... Zeiger initialisieren ... 371
13.4 ... Zeigerarithmetik ... 385
13.5 ... Zeiger, die auf andere Zeiger verweisen ... 386
13.6 ... Typensicherung bei der Dereferenzierung ... 389
13.7 ... Zeiger als Funktionsparameter (Call-by-Reference) ... 389
13.8 ... Array und Zeiger ... 396
13.9 ... Zeiger auf Strings ... 403
13.10 ... Zeiger auf Zeiger und Stringtabellen ... 405
13.11 ... Zeiger auf Funktionen ... 414
13.12 ... void-Zeiger ... 420
13.13 ... Äquivalenz zwischen Zeigern und Arrays ... 423
13.14 ... Der »restrict«-Zeiger ... 426
14. Kommandozeilenargumente ... 429
14.1 ... Argumente an die Hauptfunktion übergeben ... 430
14.2 ... Argumente aus der Kommandozeile auswerten ... 435
15. Dynamische Speicherverwaltung ... 441
15.1 ... Das Speicherkonzept ... 442
15.2 ... Speicherallokation mit »malloc()« ... 444
15.3 ... Das NULL-Mysterium ... 447
15.4 ... Speicherreservierung und ihre Probleme ... 450
15.5 ... »free()« -- Speicher wieder freigeben ... 452
15.6 ... Dynamische Arrays ... 460
15.7 ... Speicher dynamisch reservieren mit »realloc()« und »calloc()« ... 464
15.8 ... Speicher vom Stack anfordern mit »alloca()« (nicht ANSI C) ... 468
15.9 ... Ergänzende Anmerkungen zu »free()« ... 468
15.10 ... Zweidimensionale dynamische Arrays ... 469
15.11 ... Was muss man tun, wenn die Speicherallokation fehlschlägt? ... 472
16. Strukturen ... 479
16.1 ... Benutzerdefinierte Typendefinitionen mit »typedef« ... 479
16.2 ... Was ist ein strukturierter Datentyp und wozu benötigt man ihn in C? ... 480
16.3 ... Strukturen mit »typedef struct« deklarieren ... 480
16.4 ... Initialisierung und Zugriff auf Strukturen ... 482
16.5 ... Strukturen als Wertübergabe an eine Funktion benutzen ... 491
16.6 ... Strukturen als Rückgabewert einer Funktion benutzen ... 493
16.7 ... Strukturen miteinander vergleichen ... 496
16.8 ... Arrays von Strukturen erstellen ... 497
16.9 ... Strukturen in Strukturen (Nested Structures) ... 504
16.10 ... Weitere spezielle Datentypen ... 514
16.11 ... Attribute von Strukturen verändern ... 525
16.12 ... Bitfelder ... 529
16.13 ... Das »offsetof«-Makro ... 536
17. Ein-/Ausgabe-Funktionen ... 539
17.1 ... Was ist eine Datei aus Sicht der Programmiersprache C? ... 539
17.2 ... Formatierte und unformatierte Ein-/Ausgabe ... 540
17.3 ... Höhere Ein-/Ausgabe-Funktionen mit ... 540
17.4 ... Streams (Ein-/Ausgabe-Datenströme) ... 568
17.5 ... Spezielle Ein-/Ausgabe-Funktionen für Streams ... 597
17.6 ... Low-Level-Datei-I/O-Funktionen (nicht ANSI C) ... 643
18. Attribute von Dateien und das Arbeiten mit Verzeichnissen (nicht ANSI C) ... 673
18.1 ... Die Attribute einer Datei mit »stat()« ermitteln ... 673
18.2 ... Prüfen des Zugriffsrechts mit »access()« ... 691
18.3 ... Verzeichnisfunktionen ... 693
19. Arbeiten mit variabel langen Argumentlisten -- ... 707
19.1 ... Was ist eine Ellipse und wie werden mit ihr Parameter übergeben? ... 707
19.2 ... Wie kann man mit die Parameterliste abfragen? ... 708
19.3 ... Makros in -- »va_list«, »va_arg«, »va_start« und »va_end« ... 708
19.4 ... Die Argumentliste am Anfang oder Ende kennzeichnen ... 709
19.5 ... »vprintf()«, »vsprintf()«, »vfsprintf()« und »vsnsprintf()« ... 714
19.6 ... Variadic Makros -- __VA_ARGS__ ... 719
20. Zeitroutinen ... 723
20.1 ... Die Headerdatei ... 723
20.2 ... Laufzeitmessung (Profiling) ... 735
20.3 ... Besonderheiten beim Raspberry Pi ... 737
21. Weitere Headerdateien und ihre Funktionen (ANSI C) ... 739
21.1 ... Testmöglichkeiten und Fehlersuche -- ... 739
21.2 ... Zeichenklassifizierung und Umwandlung -- ... 741
21.3 ... Mathematische Funktionen -- , und ... 746
21.4 ... Einige nützliche Funktionen in ... 759
21.5 ... Länderspezifische Eigenheiten -- ... 779
21.6 ... Nichtlokale Sprünge -- ... 783
21.7 ... Einige nützliche Funktionen in ... 787
21.8 ... Die »mem...«-Funktionen zur Speichermanipulation -- ... 792
22. Dynamische Datenstrukturen ... 797
22.1 ... Lineare Listen (einfach verkettete Listen) ... 797
22.2 ... Doppelt verkettete Listen ... 831
22.3 ... Stacks nach dem LIFO-(Last-in-first-out-)Prinzip ... 849
22.4 ... Queues nach dem FIFO-Prinzip ... 869
22.5 ... Dynamisches Array mit flexiblen Elementen ... 878
23. Algorithmen ... 881
23.1 ... Was sind Algorithmen? ... 881
23.2 ... Beispiele für Algorithmen ... 883
24. MySQL und C ... 989
24.1 ... Aufbau eines Datenbanksystems ... 989
24.2 ... MySQL installieren ... 995
24.3 ... Crashkurs SQL ... 999
24.4 ... Die MySQL-C-API ... 1014
24.5 ... MySQL und C mit CGI ... 1045
24.6 ... Funktionsübersicht ... 1063
24.7 ... Datentypenübersicht der C-API ... 1066
24.8 ... Weiterführende Literatur zu Datenbanken ... 1067
25. Netzwerkprogrammierung und Cross-Plattform-Entwicklung ... 1069
25.1 ... Begriffe zur Netzwerktechnik ... 1070
25.2 ... Was sind Sockets und wie legt man sie in C an? ... 1076
25.3 ... Headerdateien für die Netzwerkprogrammierung ... 1077
25.4 ... Das Client-Server-Prinzip ... 1080
25.5 ... Erstellen einer Client-Anwendung ... 1082
25.6 ... Erstellen einer Server-Anwendung ... 1092
25.7 ... Ein einfacher TCP-Echo-Server ... 1098
25.8 ... Cross-Plattform-Development ... 1105
25.9 ... Weitere Anmerkungen zur Netzwerkprogrammierung und Literaturempfehlungen ... 1128
26. Paralleles Rechnen ... 1135
26.1 ... Was ist Multitasking und wie wird es realisiert? ... 1135
26.2 ... Braucht man spezielle Prozessoren für Multitasking? ... 1136
26.3 ... Braucht man spezielle Multitasking-Betriebssysteme? ... 1139
26.4 ... Programmiertechniken der Parallelisierung ... 1139
26.5 ... Vom Prozess zum Thread ... 1140
26.6 ... Mit POSIX-Threads programmieren ... 1144
27. Sicheres Programmieren ... 1153
27.1 ... Buffer Overflow (Speicherüberlauf) ... 1154
27.2 ... Stack Overflow (Stapelüberlauf) ... 1172
27.3 ... Memory Leaks (Speicherlecks) ... 1174
27.4 ... Weiterführende Literatur zu sicherem Programmieren ... 1180
28. Wie geht's jetzt weiter? ... 1181
28.1 ... GUI-Programmierung -- grafische Oberflächen ... 1182
28.2 ... Grafikprogrammierung unter Windows ... 1185
28.3 ... Grafikprogrammierung unter Linux (Beispiel Raspberry Pi) ... 1197
Anhang ... 1207
A ... Operatoren ... 1207
Index ... 1213
... weniger
Autoren-Porträt von Jürgen Wolf, René Krooß
Jürgen Wolf ist seit über 16 Jahren Autor und seit mehr als 10 Jahren passionierter Digitalfotograf. Seine Buchthemen sind Bildbearbeitung, Fotografie, Webentwicklung, Betriebssysteme und Programmierung. Und egal welches Thema: Bei jedem Buch ist es sein Ziel, auch komplexe Zusammenhänge klar und verständlich zu erklären. Dipl.Inform. (FH) der Informatik
Bibliographische Angaben
- Autoren: Jürgen Wolf , René Krooß
- 2020, 4. Aufl., 1228 Seiten, Maße: 18,6 x 24,9 cm, Gebunden, Deutsch
- Verlag: Rheinwerk Verlag
- ISBN-10: 3836239736
- ISBN-13: 9783836239738
- Erscheinungsdatum: 27.05.2020
Pressezitat
»Eines der ausführlichsten Bücher zu C.« Programmierbuch.de 202008
Kommentar zu "Rheinwerk Computing / C von A bis Z"
Schreiben Sie einen Kommentar zu "Rheinwerk Computing / C von A bis Z".
Kommentar verfassen