Inhaltsverzeichnis

Alle Kapitel aufklappen
Alle Kapitel zuklappen
Vorwort
15
1 Einstieg in die Welt von C
17
1.1 Die Sprache C
17
1.2 Die C-Standardbibliothek
18
1.3 Die nötigen Werkzeuge für C
21
1.4 Übersetzen mit der Entwicklungsumgebung
23
1.5 Übersetzen mit gcc und clang
27
1.6 Listings zum Buch
28
1.7 Kontrollfragen und Aufgaben im Buch
29
1.8 Aufgabe
29
2 Erste Schritte in C
31
2.1 Das erste Programm in C
31
2.2 Die Funktion printf
33
2.3 Zeichensätze in C
34
2.3.1 Basis-Ausführungszeichensatz
35
2.3.2 Escape-Sequenzen
35
2.4 Symbole von C
37
2.4.1 Bezeichner
37
2.4.2 Reservierte Schlüsselwörter
39
2.4.3 Literale
40
2.4.4 Einfache Begrenzer
42
2.5 Kommentare
43
2.6 Kontrollfragen und Aufgaben
44
3 Basisdatentypen in C
45
3.1 Variablen
45
3.2 Deklaration und Definition
45
3.3 Initialisierung und Zuweisung von Werten
47
3.4 Datentypen für Ganzzahlen
47
3.4.1 Vorzeichenlos und vorzeichenbehaftet
50
3.4.2 Suffixe für Ganzzahlen
53
3.5 Datentyp für Zeichen
53
3.5.1 Der Datentyp char
54
3.5.2 Der Datentyp wchar_t
55
3.5.3 Unicode-Unterstützung
56
3.6 Datentypen für Fließkommazahlen
57
3.6.1 Suffixe für Fließkommazahlen
58
3.6.2 Komplexe Gleitkommatypen
59
3.7 Boolescher Datentyp
60
3.8 Speicherbedarf mit sizeof ermitteln
61
3.9 Wertebereiche der Datentypen ermitteln
63
3.9.1 Limits von Integertypen
64
3.9.2 Limits von Fließkommazahlen
65
3.9.3 Integertypen mit fester Größe verwenden
66
3.9.4 Sicherheit beim Kompilieren mit _Static_assert
68
3.10 Konstanten erstellen
69
3.11 Lebensdauer und Sichtbarkeit von Variablen
70
3.12 void – ein unvollständiger Typ
71
3.13 Kontrollfragen und Aufgaben
72
4 Rechnen mit C und Operatoren
73
4.1 Werte formatiert einlesen mit scanf
73
4.2 Operatoren im Allgemeinen
77
4.3 Arithmetische Operatoren
80
4.4 Inkrement- und Dekrement-Operator
82
4.5 Bit-Operatoren
84
4.6 Implizite Typumwandlung
88
4.6.1 Arithmetische Umwandlung
88
4.6.2 Typpromotionen
90
4.6.3 Was nicht geht!
91
4.7 Explizites Casting von Typen
91
4.8 Mathematische Funktionen in C
92
4.9 Kontrollfragen und Aufgaben
97
5 Bedingte Anweisung und Verzweigung
99
5.1 Bedingte Anweisung
99
5.1.1 Vergleichsoperatoren
102
5.2 Alternative Verzweigung
104
5.3 Der Bedingungsoperator ?:
107
5.4 Mehrfache Verzweigung mit if und else if
108
5.4.1 Verschachteln von Verzweigungen
111
5.5 Mehrfache Verzweigung mit switch
113
5.6 Logische Verknüpfungen
119
5.6.1 Der !-Operator
119
5.6.2 Der &&-Operator – Logisches UND
121
5.6.3 Der ||-Operator – Logisches ODER
123
5.7 Kontrollfragen und Aufgaben
125
6 Schleifen – Programmteile wiederholen
129
6.1 Die Zählschleife – for
129
6.2 Die kopfgesteuerte while-Schleife
133
6.3 Die fußgesteuerte do-while-Schleife
135
6.4 Kontrollierte Sprünge aus Schleifen
138
6.5 Kontrollfragen und Aufgaben
141
7 Funktionen erstellen
143
7.1 Funktionen definieren
143
7.2 Funktionen aufrufen
144
7.3 Funktionsdeklaration (Vorausdeklaration)
145
7.4 Funktionsparameter
147
7.5 Rückgabewert von Funktionen
149
7.6 Exkurs: Funktion bei der Ausführung
153
7.7 Inline-Funktionen
153
7.8 Rekursionen
155
7.9 main-Funktion
156
7.10 Programm mit exit() beenden
158
7.11 Globale, lokale und statische Variablen
160
7.11.1 Lokale Variablen
160
7.11.2 Globale Variablen
162
7.11.3 Speicherklasse»static«
164
7.11.4 Die Speicherklasse extern
166
7.12 Kontrollfragen und Aufgaben
167
8 Präprozessor-Direktiven
169
8.1 Dateien einfügen mit #include
169
8.2 Konstanten und Makros mit #define und #undef
171
8.2.1 Symbolische Konstanten mit #define
171
8.2.2 Makros mit #define
174
8.2.3 Symbolische Konstanten und Makros aufheben (#undef)
177
8.3 Bedingte Kompilierung
177
8.4 Programmdiagnose mit assert()
184
8.5 Generische Auswahl
186
8.6 Eigene Header erstellen
188
8.7 Kontrollfragen und Aufgaben
190
9 Arrays und Zeichenketten (Strings)
193
9.1 Arrays verwenden
193
9.1.1 Arrays definieren
193
9.1.2 Arrays mit Werten versehen und darauf zugreifen
194
9.1.3 Arrays mit scanf einlesen
202
9.1.4 Arrays an Funktionen übergeben
203
9.2 Mehrdimensionale Arrays
205
9.2.1 Zweidimensionalen Arrays Werte zuweisen und darauf zugreifen
205
9.2.2 Zweidimensionale Arrays an eine Funktion übergeben
208
9.2.3 Noch mehr Dimensionen …
210
9.3 Strings (Zeichenketten)
211
9.3.1 Strings initialisieren
211
9.3.2 Einlesen von Strings
213
9.3.3 Unicode-Unterstützung
215
9.3.4 Stringfunktionen der Standardbibliothek – <string.h>
216
9.3.5 Sicherere Funktionen zum Schutz vor Speicherüberschreitungen
219
9.3.6 Umwandlungsfunktionen zwischen Zahlen und Strings
219
9.4 Kontrollfragen und Aufgaben
220
10 Zeiger (Pointer)
223
10.1 Zeiger vereinbaren
223
10.2 Zeiger verwenden
224
10.3 Zugriff auf den Inhalt von Zeigern
226
10.4 Zeiger als Funktionsparameter
231
10.5 Zeiger als Rückgabewert
232
10.6 Zeigerarithmetik
235
10.7 Zugriff auf Arrayelemente über Zeiger
236
10.8 Array und Zeiger als Funktionsparameter
239
10.9 char-Arrays und Zeiger
241
10.10 Arrays von Zeigern
242
10.11 void-Zeiger
245
10.12 Typ-Qualifizierer bei Zeigern
247
10.12.1 Konstanter Zeiger
247
10.12.2 Zeiger für konstante Daten
247
10.12.3 Konstanter Zeiger und Zeiger für konstante Daten
248
10.12.4 Konstante Parameter für Funktionen
248
10.12.5 restrict-Zeiger
249
10.13 Zeiger auf Funktionen
251
10.14 Kontrollfragen und Aufgaben
255
11 Dynamische Speicherverwaltung
259
11.1 Neuen Speicherblock reservieren
260
11.2 Speicherblock vergrößern oder verkleinern
265
11.3 Speicherblock freigeben
269
11.4 Kontrollfragen und Aufgaben
272
12 Komplexe Datentypen
275
12.1 Strukturen
275
12.1.1 Strukturtyp deklarieren
276
12.1.2 Definition einer Strukturvariablen
277
12.1.3 Erlaubte Operationen auf Strukturvariablen
278
12.1.4 Deklaration und Definition zusammenfassen
278
12.1.5 Synonyme für Strukturtypen erstellen
279
12.1.6 Selektion auf Komponenten einer Strukturvariablen
279
12.1.7 Strukturen initialisieren
283
12.1.8 Nur bestimmte Komponenten einer Strukturvariablen initialisieren
284
12.1.9 Zuweisung bei Strukturvariablen
285
12.1.10 Größe und Speicherausrichtung einer Struktur
286
12.1.11 Strukturen vergleichen
286
12.1.12 Strukturen, Funktionen und Strukturzeiger
286
12.1.13 Array von Strukturvariablen
291
12.1.14 Strukturvariablen als Komponente in Strukturen
294
12.1.15 Zeiger als Komponente
299
12.2 Unionen
302
12.3 Der Aufzählungstyp enum
305
12.4 Eigene Typen mit typedef
306
12.5 Kontrollfragen und Aufgaben
308
13 Dynamische Datenstrukturen
311
13.1 Verkettete Liste
311
13.1.1 Neues Element in die Liste einfügen
317
13.1.2 Element ausgeben (und suchen)
320
13.1.3 Element aus der Liste entfernen
320
13.2 Doppelt verkettete Listen
324
13.3 Kontrollfragen und Aufgaben
325
14 Eingabe- und Ausgabe-Funktionen
327
14.1 Verschiedene Streams und Standard-Streams
327
14.1.1 Stream im Textmodus
328
14.1.2 Stream im binären Modus
328
14.1.3 Standard-Streams
328
14.2 Dateien
329
14.3 Dateien öffnen
330
14.4 Dateien schließen
335
14.5 Fehler oder Dateiende prüfen
336
14.6 Funktionen für die Ein- und Ausgabe
338
14.6.1 Einzelne Zeichen lesen
338
14.6.2 Einzelne Zeichen schreiben
339
14.6.3 Zeilenweise einlesen
341
14.6.4 Zeilenweise schreiben
342
14.6.5 Lesen und Schreiben in ganzen Blöcken
347
14.7 Funktionen zur formatierten Ein-/Ausgabe
350
14.7.1 Funktionen zur formatierten Ausgabe
351
14.7.2 Funktionen zur formatierten Eingabe
360
14.8 Wahlfreier Dateizugriff
363
14.8.1 Dateiposition ermitteln
363
14.8.2 Dateiposition ändern
364
14.9 Sicherere Funktionen mit C11
367
14.10 Datei löschen oder umbenennen
368
14.11 Pufferung
368
14.12 Kontrollfragen und Aufgaben
369
A Übersichtstabellen wichtiger Sprachelemente
373
A.1 Operator-Priorität (Operator Precedence)
373
A.2 Reservierte Schlüsselwörter in C
374
A.3 Headerdateien der Standardbibliothek
375
A.4 Kommandozeilenargumente
377
A.5 Weiterführende Ressourcen
380
A.6 Schlusswort
381
B Lösungen der Übungsaufgaben
383
B.1 Antworten und Lösungen zum Kapitel 2
383
B.2 Antworten und Lösungen zum Kapitel 3
384
B.3 Antworten und Lösungen zum Kapitel 4
384
B.4 Antworten und Lösungen zum Kapitel 5
386
B.5 Antworten und Lösungen zum Kapitel 6
389
B.6 Antworten und Lösungen zum Kapitel 7
391
B.7 Antworten und Lösungen zum Kapitel 8
394
B.8 Antworten und Lösungen zum Kapitel 9
397
B.9 Antworten und Lösungen zum Kapitel 10
401
B.10 Antworten und Lösungen zum Kapitel 11
406
B.11 Antworten und Lösungen zum Kapitel 12
410
B.12 Antworten und Lösungen zum Kapitel 13
414
B.13 Antworten und Lösungen zum Kapitel 14
418
Index
423