Carsten Vogt C für Java-Programmierer ISBN-10: 3-446-40797-9 ISBN-13: 978-3-446-40797-8 Inhaltsverzeichnis Weitere Informationen oder Bestellungen unter http://www.hanser.de/978-3-446-40797-8 sowie im Buchhandel
Inhalt 1 Einführung... 13 Schnelleinstieg...14 1.1 C und Java von den Anfängen bis heute...15 1.1.1 Die Entwicklung von C...15 1.1.1.1 Der Ursprung...15 1.1.1.2 Grundlegende Eigenschaften...16 1.1.1.3 Standards...16 1.1.2 Objektorientierte Nachfolgesprachen...17 1.1.2.1 C++...17 1.1.2.2 Java...17 1.1.3 Einsatzgebiete von C und Java...18 1.2 C und Java im Sprachvergleich...18 1.2.1 Drei Beispielprogramme...18 1.2.1.1 Einfaches Programm mit Ausgabe...18 1.2.1.2 Programm mit Eingabe und C-spezifischen Datentypen...20 1.2.1.3 Programm mit einer Funktion...21 1.2.2 Eigenschaften von Java vs. Eigenschaften von C...22 1.2.2.1 Tabellarischer Vergleich...22 1.2.2.2 Objektorientierung vs. Prozedurorientierung...23 1.2.2.3 Interpretation vs. Übersetzung...25 1.3 Zu diesem Buch...26 1.3.1 Aufbau...26 1.3.2 Benutzung...27 1.3.3 Weitere Quellen...28 2 Struktur und Übersetzung von C-Programmen... 31 Schnelleinstieg...32 2.1 Aufbau von C-Programmen...33 2.1.1 C-Quellcode in einer einzelnen Datei...33 2.1.2 C-Quellcode in mehreren Dateien...34
8 Inhalt 2.2 Übersetzung von C-Programmen...35 2.2.1 Phasen der Übersetzung...35 2.2.2 Modularisierung...37 2.2.3 Übersetzung unter Windows...38 2.2.4 Übersetzung unter UNIX/Linux...39 2.3 Anweisungen des Präprozessors...41 2.3.1 #include: Einfügen von Header-Dateien...41 2.3.2 #define: einfache Ersetzung von Zeichenketten...42 2.3.3 #define: Makros mit Parametern...44 2.3.4 #ifdef, #if: bedingte Übersetzung...45 2.4 Übungsaufgaben...46 3 Kontrollstrukturen... 49 Schnelleinstieg...50 3.1 Blöcke...51 3.2 Bedingte Anweisungen...52 3.3 Schleifen...52 3.4 Ausnahmebehandlung...53 3.5 Übungsaufgaben...54 4 Datenorganisation... 55 Schnelleinstieg...56 4.1 Skalare Datentypen...57 4.1.1 Zahlen- und Zeichentypen...57 4.1.2 Wahrheitswerte...59 4.1.3 Operationen...60 4.2 Konstanten und Variablen...62 4.2.1 Konstanten...62 4.2.2 Definition und Initialisierung von skalaren Variablen...63 4.2.3 Wertzuweisungen...63 4.3 Arrays...64 4.3.1 Eindimensionale Arrays...64 4.3.2 Mehrdimensionale Arrays...67 4.3.3 Zeichenketten...68 4.3.4 Arrays in C99...70 4.4 Strukturen...71 4.4.1 Grundlegende Eigenschaften von Strukturen...71 4.4.2 Strukturtypen...73 4.4.3 Schachtelung von Strukturen...73 4.5 Unions und Bitfelder...74 4.5.1 Unions...74 4.5.2 Bitfelder...75 4.6 Selbstdefinierte Wert- und Typnamen...77 4.6.1 Aufzählungstypen...77 4.6.2 Der typedef-operator...77 4.7 Übungsaufgaben...79
Inhalt 9 5 Zeiger...81 Schnelleinstieg...82 5.1 Java-Objektvariablen vs. C-Zeigervariablen...83 5.2 Grundlegende Begriffe und Operatoren...85 5.2.1 Speicheradressen und Zeigervariablen...85 5.2.2 Adress- und Dereferenzierungsoperator...87 5.2.3 Zwei Programmbeispiele...89 5.2.4 Ungetypte Zeiger...90 5.3 Adressarithmetik...90 5.3.1 Operationen...90 5.3.2 Adressarithmetik bei Arrays...92 5.3.3 Exkurs: Zeichenkettenvariablen und -konstanten...95 5.4 Dynamische Speicherverwaltung...96 5.4.1 malloc()...96 5.4.1.1 Objekterzeugung in Java vs. Speicherbelegung in C...96 5.4.1.2 Definition von malloc()...97 5.4.2 free()...97 5.4.3 Arrays mit dynamisch bestimmter Größe...98 5.4.4 Zwei Programmbeispiele...99 5.5 Zeiger auf Strukturen...101 5.5.1 Arrays mit Zeigern auf Strukturen...101 5.5.2 Strukturen mit Zeigern auf Strukturen...102 5.6 Zeiger auf Zeiger...104 5.7 Übungsaufgaben...105 6 Funktionen... 107 Schnelleinstieg...108 6.1 Java-Methoden vs. C-Funktionen...109 6.2 Schnittstellen...111 6.2.1 Prototypen...111 6.2.2 Weitere Besonderheiten von C...113 6.3 Ausführung...116 6.3.1 Ablauf...116 6.3.2 Parameterübergabe...116 6.3.2.1 Wertaufruf...117 6.3.2.2 Referenzaufruf...117 6.3.2.3 Übergabe von Arrays...119 6.3.3 Ergebnisrückgabe...121 6.4 Das Hauptprogramm main()...122 6.5 Speicherklassen...124 6.5.1 Lokale Variablen...124 6.5.1.1 Automatische Variablen...124 6.5.1.2 Statische Variablen...125 6.5.1.3 Registervariablen...126 6.5.2 Externe Variablen...126 6.5.2.1 Programme in einer einzelnen Datei...127
10 Inhalt 6.5.2.2 Programme in mehreren Dateien...128 6.5.3 Tabellarische Zusammenfassung...130 6.6 Funktionsbibliotheken...130 6.6.1 Definition und Benutzung...130 6.6.2 Die Standardbibliothek...131 6.6.2.1 Funktionen für Zeichen und Zeichenketten...132 6.6.2.2 Mathematische Funktionen...134 6.6.2.3 Betriebssystemnahe Dienste...135 6.7 Nutzungsmöglichkeiten für Fortgeschrittene...137 6.7.1 Zeiger auf Funktionen...137 6.7.2 Funktionen als Parameter...139 6.7.3 Funktionen mit variabler Anzahl von Parametern...140 6.8 Übungsaufgaben...141 7 Ein-/Ausgabe und Dateizugriffe... 145 Schnelleinstieg...146 7.1 Grundlegende Konzepte...147 7.1.1 Datenströme in Java und in C...147 7.1.2 Standarddateien...149 7.1.3 Klassen von E/A-Funktionen...149 7.2 Funktionen für die Standardein-/-ausgabe...151 7.2.1 printf(): formatierte Ausgabe...151 7.2.1.1 Grundidee...151 7.2.1.2 Allgemeine Form...152 7.2.1.3 Weitere Beispiele...152 7.2.2 scanf(): formatierte Eingabe...153 7.2.2.1 Grundidee...153 7.2.2.2 Allgemeine Form...154 7.2.2.3 Pufferung der Eingabedaten...155 7.2.2.4 Weitere Beispiele...156 7.2.3 Weitere Funktionen für Zeichen und Zeichenketten...159 7.3 Funktionen für beliebige Datenströme...160 7.3.1 Öffnen und Schließen...160 7.3.2 Ein-/Ausgabe einzelner Zeichen...163 7.3.3 Ein-/Ausgabe von Zeichenketten...164 7.3.4 Formatierte Ein-/Ausgabe...164 7.3.5 Ein-/Ausgabe beliebiger Bytefolgen...165 7.3.6 Wahlfreier Zugriff...167 7.3.7 Spezielle Funktionen...169 7.4 Operationen auf dem Dateisystem...170 7.5 Übungsaufgaben...171 8 Dynamische Datenstrukturen... 173 Schnelleinstieg...174 8.1 Dynamische Datenhaltung in Java und in C...175
Inhalt 11 8.2 Listen...176 8.2.1 Eigenschaften...176 8.2.2 Einfach verkettete Listen...177 8.2.2.1 Typ der Knoten...177 8.2.2.2 Durchlaufen einer Liste...178 8.2.2.3 Suchen von Einträgen...179 8.2.2.4 Einfügen von Knoten...179 8.2.2.5 Entfernen von Knoten...182 8.2.3 Doppelt verkettete Listen...185 8.2.3.1 Typ der Knoten...185 8.2.3.2 Durchlaufen einer Liste...186 8.2.3.3 Suchen von Einträgen...186 8.2.3.4 Einfügen von Knoten...187 8.2.3.5 Entfernen von Knoten...189 8.2.4 Queues und Stacks...191 8.2.4.1 Queues...191 8.2.4.2 Stacks...192 8.3 Hashtabellen...192 8.3.1 Eigenschaften...193 8.3.2 Realisierung in Java und in C...193 8.4 Bäume...195 8.4.1 Eigenschaften...195 8.4.2 Binärbäume...196 8.4.2.1 Eigenschaften und Beispiele...196 8.4.2.2 Realisierung in C...198 8.4.2.3 Durchlaufen eines Binärbaums...199 8.4.2.4 Löschen eines Binärbaums...202 8.4.2.5 Suchen eines Werts in einem Suchbaum...202 8.4.2.6 Einfügen eines Werts in einen Suchbaum...202 8.4.2.7 Löschen eines Werts aus einem Suchbaum...204 8.5 Mengen...206 8.5.1 Realisierung durch Listen und Bäume...206 8.5.1.1 Grundlegende Mengenoperationen auf C-Listen...206 8.5.1.2 Bilden der Vereinigungsmenge...207 8.5.1.3 Bilden der Differenzmenge...208 8.5.1.4 Bilden der Schnittmenge...209 8.5.2 Realisierung durch Bitmaps...209 8.6 Übungsaufgaben...212 A Auswertung von Ausdrücken... 213 A.1 Implizite Typkonversionen...213 A.1.1 Konversionen in Rechenausdrücken...213 A.1.2 Konversionen bei Zuweisungen...214 A.2 Sequenzpunkte...216 A.3 Bindungsstärken und Auswertungsreihenfolgen...216
12 Inhalt B Vordefinierte Konstanten... 217 B.1 Wertebereiche der skalaren Typen...217 B.2 Mathematische Konstanten...218 C Standardbibliothek... 219 C.1 Dateizugriffe und Ein-/Ausgabe...219 C.1.1 Thematische Übersicht über die Funktionen...219 C.1.2 Funktionen in alphabetischer Reihenfolge...221 C.2 Zeichen, Zeichenketten und Bytefolgen...233 C.2.1 Test einzelner Zeichen...233 C.2.2 Umwandlung von Zeichen...234 C.2.3 Zeichenketten...234 C.2.4 Bytefolgen/Arrays...235 C.2.5 Konversionen...236 C.3 Mathematische Funktionen...237 C.4 Betriebssystemnahe Dienste...238 C.4.1 Dynamische Speicherverwaltung...238 C.4.2 Zeitfunktionen...239 C.4.3 Weitere Funktionen...240 D Häufig gebrauchte Tabellen... 241 D.1 ASCII...241 D.2 Variablengrößen und Wertebereiche...242 D.3 Bindungsstärke von Operatoren...243 D.4 Optionen für fopen()...244 D.5 Konversionsangaben für die Ein-/Ausgabe...245 D.5.1 printf()...245 D.5.2 scanf()...247 Literatur und Internet... 248 Index... 251