C für Java-Programmierer
von: Carsten Vogt
Carl Hanser Fachbuchverlag, 2007
ISBN: 9783446411326
Sprache: Deutsch
251 Seiten, Download: 8896 KB
Format: PDF, auch als Online-Lesen
Vorwort | 6 | ||
Inhalt | 8 | ||
1 Einführung | 14 | ||
Schnelleinstieg: C und Java im Vergleich | 15 | ||
1.1 C und Java von den Anfängen bis heute | 16 | ||
1.1.1 Die Entwicklung von C | 16 | ||
1.1.1.1 Der Ursprung | 16 | ||
1.1.1.2 Grundlegende Eigenschaften | 17 | ||
1.1.1.3 Standards | 17 | ||
1.1.2 Objektorientierte Nachfolgesprachen | 18 | ||
1.1.2.1 C++ | 18 | ||
1.1.2.2 Java | 18 | ||
1.1.3 Einsatzgebiete von C und Java | 19 | ||
1.2 C und Java im Sprachvergleich | 19 | ||
1.2.1 Drei Beispielprogramme | 19 | ||
1.2.1.1 Einfaches Programm mit Ausgabe | 19 | ||
1.2.1.2 Programm mit Eingabe und C-spezifischen Datentypen | 21 | ||
1.2.1.3 Programm mit einer Funktion | 22 | ||
1.2.2 Eigenschaften von Java vs. Eigenschaften von C | 23 | ||
1.2.2.1 Tabellarischer Vergleich | 23 | ||
1.2.2.2 Objektorientierung vs. Prozedurorientierung | 24 | ||
1.2.2.3 Interpretation vs. Übersetzung | 26 | ||
1.3 Zu diesem Buch | 27 | ||
1.3.1 Aufbau | 27 | ||
1.3.2 Benutzung | 28 | ||
1.3.3 Weitere Quellen | 29 | ||
2 Struktur und Übersetzung von C-Programmen | 31 | ||
Schnelleinstieg: Struktur und Übersetzung von C-Programmen | 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 | ||
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 | 48 | ||
Schnelleinstieg: Kontrollstrukturen | 49 | ||
3.1 Blöcke | 50 | ||
3.2 Bedingte Anweisungen | 51 | ||
3.3 Schleifen | 51 | ||
3.4 Ausnahmebehandlung | 52 | ||
3.5 Übungsaufgaben | 53 | ||
4 Datenorganisation | 54 | ||
Schnelleinstieg: Datenorganisation | 55 | ||
4.1 Skalare Datentypen | 56 | ||
4.1.1 Zahlen- und Zeichentypen | 56 | ||
4.1.2 Wahrheitswerte | 58 | ||
4.1.3 Operationen | 59 | ||
4.2 Konstanten und Variablen | 61 | ||
4.2.1 Konstanten | 61 | ||
4.2.2 Definition und Initialisierung von skalaren Variablen | 62 | ||
4.2.3 Wertzuweisungen | 62 | ||
4.3 Arrays | 63 | ||
4.3.1 Eindimensionale Arrays | 63 | ||
4.3.2 Mehrdimensionale Arrays | 66 | ||
4.3.3 Zeichenketten | 67 | ||
4.3.4 Arrays in C99 | 69 | ||
4.4 Strukturen | 70 | ||
4.4.1 Grundlegende Eigenschaften von Strukturen | 70 | ||
4.4.2 Strukturtypen | 72 | ||
4.4.3 Schachtelung von Strukturen | 72 | ||
4.5 Unions und Bitfelder | 73 | ||
4.5.1 Unions | 73 | ||
4.5.2 Bitfelder | 74 | ||
4.6 Selbstdefinierte Wert- und Typnamen | 76 | ||
4.6.1 Aufzählungstypen | 76 | ||
4.6.2 Der typedef-Operator | 76 | ||
4.7 Übungsaufgaben | 78 | ||
5 Zeiger | 80 | ||
Schnelleinstieg: Zeiger | 81 | ||
5.1 Java-Objektvariablen vs. C-Zeigervariablen | 82 | ||
5.2 Grundlegende Begriffe und Operatoren | 84 | ||
5.2.1 Speicheradressen und Zeigervariablen | 84 | ||
5.2.2 Adress- und Dereferenzierungsoperator | 86 | ||
5.2.3 Zwei Programmbeispiele | 88 | ||
5.2.4 Ungetypte Zeiger | 89 | ||
5.3 Adressarithmetik | 89 | ||
5.3.1 Operationen | 89 | ||
5.3.2 Adressarithmetik bei Arrays | 91 | ||
5.3.3 Exkurs: Zeichenkettenvariablen und -konstanten | 94 | ||
5.4 Dynamische Speicherverwaltung | 95 | ||
5.4.1 malloc() | 95 | ||
5.4.1.1 Objekterzeugung in Java vs. Speicherbelegung in C | 95 | ||
5.4.1.2 Definition von malloc() | 96 | ||
5.4.2 free() | 96 | ||
5.4.3 Arrays mit dynamisch bestimmter Größe | 97 | ||
5.4.4 Zwei Programmbeispiele | 98 | ||
5.5 Zeiger auf Strukturen | 100 | ||
5.5.1 Arrays mit Zeigern auf Strukturen | 100 | ||
5.5.2 Strukturen mit Zeigern auf Strukturen | 101 | ||
5.6 Zeiger auf Zeiger | 103 | ||
5.7 Übungsaufgaben | 104 | ||
6 Funktionen | 106 | ||
Schnelleinstieg: Funktionen | 107 | ||
6.1 Java-Methoden vs. C-Funktionen | 108 | ||
6.2 Schnittstellen | 110 | ||
6.2.1 Prototypen | 110 | ||
6.2.2 Weitere Besonderheiten von C | 112 | ||
6.3 Ausführung | 115 | ||
6.3.1 Ablauf | 115 | ||
6.3.2 Parameterübergabe | 115 | ||
6.3.2.1 Wertaufruf | 116 | ||
6.3.2.2 Referenzaufruf | 116 | ||
6.3.2.3 Übergabe von Arrays | 118 | ||
6.3.3 Ergebnisrückgabe | 120 | ||
6.4 Das Hauptprogramm main() | 121 | ||
6.5 Speicherklassen | 123 | ||
6.5.1 Lokale Variablen | 123 | ||
6.5.1.1 Automatische Variablen | 123 | ||
6.5.1.2 Statische Variablen | 124 | ||
6.5.1.3 Registervariablen | 125 | ||
6.5.2 Externe Variablen | 125 | ||
6.5.2.1 Programme in einer einzelnen Datei | 126 | ||
6.5.2.2 Programme in mehreren Dateien | 127 | ||
6.5.3 Tabellarische Zusammenfassung | 129 | ||
6.6 Funktionsbibliotheken | 129 | ||
6.6.1 Definition und Benutzung | 129 | ||
6.6.2 Die Standardbibliothek | 130 | ||
6.6.2.1 Funktionen für Zeichen und Zeichenketten | 131 | ||
6.6.2.2 Mathematische Funktionen | 133 | ||
6.6.2.3 Betriebssystemnahe Dienste | 134 | ||
6.7 Nutzungsmöglichkeiten für Fortgeschrittene | 136 | ||
6.7.1 Zeiger auf Funktionen | 136 | ||
6.7.2 Funktionen als Parameter | 138 | ||
6.7.3 Funktionen mit variabler Anzahl von Parametern | 139 | ||
6.8 Übungsaufgaben | 140 | ||
7 Ein-/Ausgabe und Dateizugriffe | 143 | ||
Schnelleinstieg: Ein-/Ausgabe und Dateizugriffe | 144 | ||
7.1 Grundlegende Konzepte | 145 | ||
7.1.1 Datenströme in Java und in C | 145 | ||
7.1.2 Standarddateien | 147 | ||
7.1.3 Klassen von E/A-Funktionen | 147 | ||
7.2 Funktionen für die Standardein-/-ausgabe | 149 | ||
7.2.1 printf(): formatierte Ausgabe | 149 | ||
7.2.1.1 Grundidee | 149 | ||
7.2.1.2 Allgemeine Form | 150 | ||
7.2.1.3 Weitere Beispiele | 150 | ||
7.2.2 scanf(): formatierte Eingabe | 151 | ||
7.2.2.1 Grundidee | 151 | ||
7.2.2.2 Allgemeine Form | 152 | ||
7.2.2.3 Pufferung der Eingabedaten | 153 | ||
7.2.2.4 Weitere Beispiele | 154 | ||
7.2.3 Weitere Funktionen für Zeichen und Zeichenketten | 157 | ||
7.3 Funktionen für beliebige Datenströme | 158 | ||
7.3.1 Öffnen und Schließen | 158 | ||
7.3.2 Ein-/Ausgabe einzelner Zeichen | 161 | ||
7.3.3 Ein-/Ausgabe von Zeichenketten | 162 | ||
7.3.4 Formatierte Ein-/Ausgabe | 162 | ||
7.3.5 Ein-/Ausgabe beliebiger Bytefolgen | 163 | ||
7.3.6 Wahlfreier Zugriff | 165 | ||
7.3.7 Spezielle Funktionen | 167 | ||
7.4 Operationen auf dem Dateisystem | 168 | ||
7.5 Übungsaufgaben | 169 | ||
8 Dynamische Datenstrukturen | 170 | ||
Schnelleinstieg: Dynamische Datenstrukturen | 171 | ||
8.1 Dynamische Datenhaltung in Java und in C | 172 | ||
8.2 Listen | 173 | ||
8.2.1 Eigenschaften | 173 | ||
8.2.2 Einfach verkettete Listen | 174 | ||
8.2.2.1 Typ der Knoten | 174 | ||
8.2.2.2 Durchlaufen einer Liste | 175 | ||
8.2.2.3 Suchen von Einträgen | 176 | ||
8.2.2.4 Einfügen von Knoten | 176 | ||
8.2.2.5 Entfernen von Knoten | 179 | ||
8.2.3 Doppelt verkettete Listen | 182 | ||
8.2.3.1 Typ der Knoten | 182 | ||
8.2.3.2 Durchlaufen einer Liste | 183 | ||
8.2.3.3 Suchen von Einträgen | 183 | ||
8.2.3.4 Einfügen von Knoten | 184 | ||
8.2.3.5 Entfernen von Knoten | 186 | ||
8.2.4 Queues und Stacks | 188 | ||
8.2.4.1 Queues | 188 | ||
8.2.4.2 Stacks | 189 | ||
8.3 Hashtabellen | 189 | ||
8.3.1 Eigenschaften | 190 | ||
8.3.2 Realisierung in Java und in C | 190 | ||
8.4 Bäume | 192 | ||
8.4.1 Eigenschaften | 192 | ||
8.4.2 Binärbäume | 193 | ||
8.4.2.1 Eigenschaften und Beispiele | 193 | ||
8.4.2.2 Realisierung in C | 195 | ||
8.4.2.3 Durchlaufen eines Binärbaums | 196 | ||
8.4.2.4 Löschen eines Binärbaums | 199 | ||
8.4.2.5 Suchen eines Werts in einem Suchbaum | 199 | ||
8.4.2.6 Einfügen eines Werts in einen Suchbaum | 199 | ||
8.4.2.7 Löschen eines Werts aus einem Suchbaum | 201 | ||
8.5 Mengen | 203 | ||
8.5.1 Realisierung durch Listen und Bäume | 203 | ||
8.5.1.1 Grundlegende Mengenoperationen auf C-Listen | 203 | ||
8.5.1.2 Bilden der Vereinigungsmenge | 204 | ||
8.5.1.3 Bilden der Differenzmenge | 205 | ||
8.5.1.4 Bilden der Schnittmenge | 206 | ||
8.5.2 Realisierung durch Bitmaps | 206 | ||
8.6 Übungsaufgaben | 209 | ||
Anhang | 210 | ||
A Auswertung von Ausdrücken | 210 | ||
A.1 Implizite Typkonversionen | 210 | ||
A.1.1 Konversionen in Rechenausdrücken | 210 | ||
A.1.2 Konversionen bei Zuweisungen | 211 | ||
A.2 Sequenzpunkte | 213 | ||
A.3 Bindungsstärken und Auswertungsreihenfolgen | 213 | ||
B Vordefinierte Konstanten | 214 | ||
B.1 Wertebereiche der skalaren Typen | 214 | ||
B.2 Mathematische Konstanten | 215 | ||
C Standardbibliothek | 216 | ||
C.1 Dateizugriffe und Ein-/Ausgabe | 216 | ||
C.1.1 Thematische Übersicht über die Funktionen | 216 | ||
C.1.2 Funktionen in alphabetischer Reihenfolge | 218 | ||
C.2 Zeichen, Zeichenketten und Bytefolgen | 230 | ||
C.2.1 Test einzelner Zeichen | 230 | ||
C.2.2 Umwandlung von Zeichen | 231 | ||
C.2.3 Zeichenketten | 231 | ||
C.2.4 Bytefolgen/Arrays | 232 | ||
C.2.5 Konversionen | 233 | ||
C.3 Mathematische Funktionen | 234 | ||
C.4 Betriebssystemnahe Dienste | 235 | ||
C.4.1 Dynamische Speicherverwaltung | 235 | ||
C.4.2 Zeitfunktionen | 236 | ||
C.4.3 Weitere Funktionen | 237 | ||
D Häufig gebrauchte Tabellen | 238 | ||
D.1 ASCII | 238 | ||
D.2 Variablengrößen und Wertebereiche | 239 | ||
D.3 Bindungsstärke von Operatoren | 240 | ||
D.4 Optionen für fopen() | 241 | ||
D.5 Konversionsangaben für die Ein-/Ausgabe | 242 | ||
D.5.1 printf() | 242 | ||
D.5.2 scanf() | 244 | ||
Literatur und Internet | 245 | ||
Bücher | 245 | ||
Standardisierungsdokumente | 245 | ||
Internet-Quellen | 246 | ||
Index | 247 | ||
Mehr eBooks bei www.ciando.com | 0 |