Wolf / Krooß | C von A bis Z | Buch | 978-3-8362-9504-8 | sack.de

Buch, Deutsch, 1263 Seiten, Format (B × H): 175 mm x 246 mm, Gewicht: 1958 g

Reihe: Rheinwerk Computing

Wolf / Krooß

C von A bis Z

Das umfassende Handbuch für die Programmierung mit C. Zum Lernen und Nachschlagen. Aktuell zum Standard C23

Buch, Deutsch, 1263 Seiten, Format (B × H): 175 mm x 246 mm, Gewicht: 1958 g

Reihe: Rheinwerk Computing

ISBN: 978-3-8362-9504-8
Verlag: Rheinwerk Verlag GmbH


Unser beliebter Klassiker in fünfter Auflage. Zum aktuellen Standard C23 und mit einem Autorenteam aus Praxis und Lehre. 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
Wolf / Krooß C von A bis Z jetzt bestellen!

Weitere Infos & Material


Vorwort. 25

  1.  Einstieg in C. 27

       1.1. Übersicht zu C. 27

       1.2. Der ANSI-C-Standard. 29

       1.3. Der POSIX-Standard. 32

       1.4. Vor- und Nachteile der Programmiersprache C. 33

       1.5. C in diesem Buch. 34

       1.6. Was benötigen Sie für C?. 35

       1.7. Welcher Compiler und welches Betriebssystem?. 37

       1.8. Unterschiede zwischen Windows und Linux. 38

       1.9. Eine Programmierumgebung einrichten am Beispiel von Pelles C 8.00 für Windows. 38

       1.10. Eine Programmierumgebung einrichten - Nano/GCC für Linux. 47

  2.  Eine günstige Programmierplattform - der Raspberry Pi. 49

       2.1. Was genau ist der Raspberry Pi?. 50

       2.2. Installation eines Linux-Betriebssystems am Beispiel von Raspberry Pi OS. 54

       2.3. Die Konfiguration des Raspberry Pi im Detail. 63

       2.4. Das Tool raspi-config. 63

  3.  Das erste Programm. 69

       3.1. Was leistet der Editor?. 70

       3.2. Was leistet der Compiler?. 70

       3.3. Was sind Include-Dateien, und wozu benötigt man sie?. 71

       3.4. Das erste Programm - die Ausgabe eines Textes in der Konsole. 71

       3.5. Das Hallo-Welt-Programm im Detail. 72

       3.6. Wie kompiliert man ein Programm und führt es anschließend aus?. 75

  4.  Grundlagen. 77

       4.1. Symbole. 77

       4.2. Zeichensätze. 84

       4.3. Strings. 89

       4.4. Das Einführungsbeispiel mit Strings. 90

  5.  Basisdatentypen. 91

       5.1. Was ist ein Byte, und wie werden Zahlen in C gespeichert?. 91

       5.2. Was ist eine Variable, und was ist ein Variablentyp?. 92

       5.3. Was ist ein Operand?. 93

       5.4. Was ist ein Parameter?. 93

       5.5. Wie speichert ein Prozessor Variablen, Parameter und Operanden?. 93

       5.6. Was sind Speicheradressen, und warum sind sie wichtig für C?. 93

       5.7. Deklaration und Definition von Variablen. 94

       5.8. Array-Datentypen (Datenfelder). 96

       5.9. Standard-Datentypen. 96

       5.10. Ganzzahlige Typen mit vorgegebener Breite - . 103

       5.11. Die Gleitpunkttypen 'float' und 'double'. 107

       5.12. Komplexe Gleitpunkttypen - . 115

       5.13. Der Datentyp 'char', Standardgröße 1 Byte. 117

       5.14. Nationale contra internationale Zeichensätze. 123

       5.15. Boolesche Werte - . 127

       5.16. Der Unterschied zwischen vorzeichenlosen und vorzeichenbehafteten Zahlen. 128

       5.17. Limits für Ganzzahl- und Gleitpunktdatentypen. 130

       5.18. Der Typ 'void'. 134

       5.19. Numerische Konstanten. 134

       5.20. Umwandlungsvorgaben für formatierte Ein-/Ausgabe. 136

  6.  Formatierte Ein-/Ausgabe mit 'scanf()' und 'printf()'. 145

       6.1. Formatierte Eingabe mit 'scanf()'. 145

       6.2. Formatierte Ausgabe mit 'printf()'. 155

  7.  Operatoren. 159

       7.1. Was sind Operatoren, und wozu benötigt man sie in C?. 159

       7.2. Arithmetische Operatoren. 160

       7.3. Erweiterte Darstellung arithmetischer Operatoren. 164

       7.4. Inkrement- und Dekrement-Operatoren. 165

       7.5. Bit-Operatoren. 167

       7.6. Makros für logische Operatoren und Bit-Operatoren - . 175

       7.7. Der 'sizeof'-Operator. 176

  8.  Typumwandlung. 179

       8.1. Automatische implizite Datentypumwandlung durch den CCompiler. 179

       8.2. Wozu benötigt man das benutzerdefinierte explizite Typecasting?. 184

       8.3. Explizite Datentypumwandlung mit Typecasting an Beispielen. 184

  9.  Kontrollstrukturen. 187

       9.1. Verzweigungen mit der 'if'-Bedingung. 188

       9.2. Die Verzweigung mit 'else if'. 192

       9.3. Die Verzweigung mit 'else'. 194

       9.4. Der !-Operator (logischer NOT-Operator). 198

       9.5. Logisches UND (&&) - logisches ODER ( ). 200

       9.6. Der Bedingungsoperator '?:'. 203

       9.7. Fallunterscheidung: die 'switch'-Verzweigung. 205

       9.8. Die 'while'-Schleife. 210

       9.9. Die 'do while'-Schleife. 214

       9.10. Die 'for'-Schleife. 219

       9.11. Kontrollierter Ausstieg aus Schleifen mit 'break'. 227

       9.12. Direkte Sprünge mit 'goto'. 229

       9.13. Einige Anmerkungen zum Notationsstil, ehe Sie weiterlesen. 229

       9.14. Einige Anmerkungen zu einem guten Programmierstil. 230

10.  Funktionen. 233

       10.1. Was sind Funktionen?. 233

       10.2. Wozu dienen Funktionen?. 234

       10.3. Definition von Funktionen. 234

       10.4. Funktionsaufruf. 235

       10.5. Funktionsdeklaration. 237

       10.6. Lokale Variablen. 239

       10.7. Globale Variablen. 241

       10.8. Statische Variablen. 243

       10.9. Schlüsselwörter für Variablen - Speicherklassen. 244

       10.10. Typ-Qualifizierer. 245

       10.11. Geltungsbereich von Variablen. 246

       10.12. Speicherklassen-Spezifizierer für Funktionen. 248

       10.13. Datenaustausch zwischen Funktionen. 249

       10.14. Wertübergabe an Funktionen (Call-by-Value). 250

       10.15. Der Rückgabewert von Funktionen. 254

       10.16. Die Hauptfunktion 'main()'. 256

       10.17. Was bedeutet der Rückgabewert beim Beenden eines Programms?. 258

       10.18. Funktionen der Laufzeitbibliothek. 262

       10.19. Getrenntes Kompilieren von Quelldateien. 263

       10.20. Rekursive Funktionen (Rekursion). 265

       10.21. 'inline'-Funktionen. 278

11.  Präprozessor-Direktiven. 281

       11.1. Mit '#include' Dateien einbinden. 282

       11.2. Wichtige vordefinierte Headerdateien für C. 283

       11.3. Makros und Konstanten - '#define'. 285

       11.4. Bedingte Kompilierung mit '#ifdef'. 294

       11.5. Vordefinierte Präprozessor-Direktiven (ANSI C). 300

       11.6. Einen Makroparameter durch einen String ersetzen. 302

       11.7. '#undef' - Makronamen wieder aufheben. 304

       11.8. Fehlermeldungen ausgeben mit '#error'. 304

       11.9. '#pragma' (gilt nur für Windows). 306

12.  Arrays. 307

       12.1. Arrays deklarieren. 308

       12.2. Initialisierung und Zugriff auf Arrays. 309

       12.3. Arrays vergleichen. 316

       12.4. Anzahl der Elemente eines Arrays ermitteln. 318

       12.5. Übergabe von Arrays an Funktionen. 319

       12.6. Arrays aus Funktionen zurückgeben. 322

       12.7. Programmbeispiel zu Arrays. 323

       12.8. Array-Werte über die Tastatur einlesen. 327

       12.9. Mehrdimensionale Arrays. 328

       12.10. Arrays in eine Tabellenkalkulation einlesen (CSV-Dateien). 343

       12.11. Strings/Zeichenketten ('char'-Array). 345

       12.12. Einlesen von Strings. 352

       12.13. Die Standard-Bibliothek . 355

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. 384

       13.5. Zeiger, die auf andere Zeiger verweisen. 385

       13.6. Typensicherung bei der Dereferenzierung. 388

       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. 415

       13.12. void-Zeiger. 420

       13.13. Äquivalenz zwischen Zeigern und Arrays. 424

       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. 451

       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?. 479

       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. 495

       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. 524

       16.12. Bitfelder. 528

       16.13. Das 'offsetof'-Makro. 535

17.  Ein-/Ausgabe-Funktionen. 537

       17.1. Was ist eine Datei aus Sicht der Programmiersprache C?. 537

       17.2. Formatierte und unformatierte Ein-/Ausgabe. 538

       17.3. Höhere Ein-/Ausgabe-Funktionen mit . 538

       17.4. Streams (Ein-/Ausgabe-Datenströme). 566

       17.5. Spezielle Ein-/Ausgabe-Funktionen für Streams. 595

       17.6. Low-Level-Datei-I/O-Funktionen (nicht ANSI C). 641

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 - . 705

       19.1. Was ist eine Ellipse, und wie werden mit ihr Parameter übergeben?. 705

       19.2. Wie kann man mit die Parameterliste abfragen?. 706

       19.3. Makros in - 'va_list', 'va_arg', 'va_start' und 'va_end'. 706

       19.4. Die Argumentliste am Anfang oder Ende kennzeichnen. 707

       19.5. 'vprintf()', 'vsprintf()', 'vfsprintf()' und 'vsnsprintf()'. 712

       19.6. Variadic Makros - __VA_ARGS__. 716

20.  Zeitroutinen. 721

       20.1. Die Headerdatei . 721

       20.2. Laufzeitmessung (Profiling). 734

       20.3. Besonderheiten beim Raspberry Pi. 735

21.  Weitere Headerdateien und ihre Funktionen (ANSI C). 737

       21.1. Testmöglichkeiten und Fehlersuche - . 738

       21.2. Zeichenklassifizierung und Umwandlung - . 739

       21.3. Mathematische Funktionen - , und . 744

       21.4. Einige nützliche Funktionen in . 758

       21.5. Länderspezifische Eigenheiten - . 778

       21.6. Nichtlokale Sprünge - . 782

       21.7. Einige nützliche Funktionen in . 786

       21.8. Die 'mem.'-Funktionen zur Speichermanipulation - . 791

22.  Dynamische Datenstrukturen. 797

       22.1. Lineare Listen (einfach verkettete Listen). 797

       22.2. Doppelt verkettete Listen. 832

       22.3. Stacks nach dem LIFO-(Last-in-first-out-)Prinzip. 849

       22.4. Queues nach dem FIFO-Prinzip. 870

       22.5. Dynamisches Array mit flexiblen Elementen. 879

23.  Algorithmen. 881

       23.1. Was sind Algorithmen?. 881

       23.2. Einige einfache Beispiele für Algorithmen. 883

       23.3. Kryptografische Algorithmen. 969

24.  MySQL und C. 1027

       24.1. Aufbau eines Datenbanksystems. 1027

       24.2. MySQL installieren. 1033

       24.3. Crashkurs SQL. 1037

       24.4. Die MySQL-C-API. 1052

       24.5. MySQL und C mit CGI. 1083

       24.6. Funktionsübersicht. 1101

       24.7. Datentypenübersicht der C-API. 1105

       24.8. Weiterführende Literatur zu Datenbanken. 1105

25.  Netzwerkprogrammierung und Cross-Plattform-Entwicklung. 1107

       25.1. Begriffe zur Netzwerktechnik. 1107

       25.2. Was sind Sockets und wie legt man sie in C an?. 1114

       25.3. Headerdateien für die Netzwerkprogrammierung. 1115

       25.4. Das Client-Server-Prinzip. 1118

       25.5. Erstellen einer Client-Anwendung. 1120

       25.6. Erstellen einer Server-Anwendung. 1130

       25.7. Ein einfacher TCP-Echo-Server. 1135

       25.8. Cross-Plattform-Development. 1143

       25.9. Weitere Anmerkungen zur Netzwerkprogrammierung und Literaturempfehlungen. 1166

26.  Paralleles Rechnen. 1173

       26.1. Was ist Multitasking und wie wird es realisiert?. 1173

       26.2. Braucht man spezielle Prozessoren für Multitasking?. 1174

       26.3. Braucht man spezielle Multitasking-Betriebssysteme?. 1177

       26.4. Programmiertechniken der Parallelisierung. 1177

       26.5. Vom Prozess zum Thread. 1179

       26.6. Mit POSIX-Threads programmieren. 1182

27.  Sicheres Programmieren. 1193

       27.1. Buffer Overflow (Speicherüberlauf). 1194

       27.2. Warum sind Buffer Overflows kritisch für die Sicherheit?. 1195

       27.3. Wie man Buffer Overflows vermeidet. 1202

       27.4. Gegenmaßnahmen zum Buffer Overflow, wenn das Programm fertig ist. 1205

       27.5. Stack Overflow (Stapelüberlauf). 1210

       27.6. Was verursacht Stack Overflows?. 1210

       27.7. Warum ist ein Stapelüberlauf kritisch für die Sicherheit?. 1210

       27.8. Wie man Stack Overflows verhindert. 1211

       27.9. Memory Leaks (Speicherlecks). 1212

       27.10. Bibliotheken und Tools zu Memory Leaks. 1216

       27.11. Tipps zu Sicherheitsproblemen. 1217

28.  Wie geht's jetzt weiter?. 1219

       28.1. GUI-Programmierung - grafische Oberflächen. 1220

       28.2. Grafikprogrammierung unter Windows. 1223

  Anhang. 1241

       A. Operatoren. 1241

  Index. 1247


Krooß, René
Dipl.Inform. (FH) der Informatik

Wolf, Jürgen
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.


Ihre Fragen, Wünsche oder Anmerkungen
Vorname*
Nachname*
Ihre E-Mail-Adresse*
Kundennr.
Ihre Nachricht*
Lediglich mit * gekennzeichnete Felder sind Pflichtfelder.
Wenn Sie die im Kontaktformular eingegebenen Daten durch Klick auf den nachfolgenden Button übersenden, erklären Sie sich damit einverstanden, dass wir Ihr Angaben für die Beantwortung Ihrer Anfrage verwenden. Selbstverständlich werden Ihre Daten vertraulich behandelt und nicht an Dritte weitergegeben. Sie können der Verwendung Ihrer Daten jederzeit widersprechen. Das Datenhandling bei Sack Fachmedien erklären wir Ihnen in unserer Datenschutzerklärung.