1. Algorithmus
2. CPU, Programmiersprachen
3. Zahlenrepräsentationen
- Zahlenrepräsentationen
- Stellenwertsysteme
- Ganze Zahlen
- Festkommazahlen
- IEEE 754 Floating Point
- Darstellung von Zeichen
4. Datentypen
5. Sprachdefinition
6. Kontrollfluss
7. Compiler und IDE
8. Funktionen
9. Zeiger
- Zeiger
- Zeiger verändern
- Zeiger auf andere Datentypen
- Evaluation von Zeigern
- Void-Zeiger
- Zeiger auf Zeiger
10. Felder und Zeichenketten
- Array
- const
- String
- String > Initialisierung
- Nullterminator
- Escape-Sequenzen
- Stringfunktionen:
11. Ein- und Ausgabe
Fazit
12. Debugging und Tests
Fazit
- Benutzereingaben sind immer Kritisch und führen zu vielen Sicherheitsproblemen
- Deshalb: Benutzereingaben validieren
13. Rekursion
Fazit
- Mächtiges Instrument
- Aber: Speicherintensiv und oft schwierig, eine rekursive Lösung zu finden
14. Entwurfsmethoden
tl;dr
Divide and Conquer, z.B.: minmax Backtracking, z.B.: Dame-Problem
15. Zeiger und Felder
Wissenswert
- Gibt eine Funktion ein Feld zurück, das in der Funktion erstellt wurde, wird das Feld ja bei Funktionsende wieder abgebaut!
- Lösung: static
16. Benutzerdefinierte Datentypen
- enum erlaubt Aufzählungen ganzzahliger Konstanten.
- Mit typedef kann man seine eigenen Datentypen benennen.
- Mit struct kann man Datensätze definieren.
- Mit union kann man mehrere Komponenten an ein und der selben Stelle im Speicher ablegen (seltene Anwendungsbereiche)
17. Datenstrukturen
- Datenstrukturen mit struct
- Variable Datentypen mit union
- Byteorder
- Speicherverwaltung
- Typmodifizierer register 1 und volatile
18. Dynamischer Speicher
- malloc
- calloc
- Zugriff über Zeiger:
MyStr->str; // Äquivalent zu: (*MyStr).str; - Bei defensiver Programmierung wird jedes Ergebnis eines malloc bzw. calloc-Aufrufs gegen NULL geprüft
- free
- realloc
19. Speicher
- Speicheraufbau eines C-Programms
- Buffer Overflow
20. Abstrakte Datentypen
- Beispiel anhand einfacherer Funktionen für Strings
- Mit Hilfe von struct, typedef und Funktionen die implementiert werden müssen
21. Preprozessor
22. Listen
- Einfach verkettete Liste
- Doppelt verkettete Liste
23. Zeiger auf Funktionen
24. Bitweise Bearbeitungen
25. Compiler Optimierungen
26. Sonstiges
- goto
- Abkürzungen:
+=,-=,*=,/=,&=,|=,>>=,<<=
- Präfix- und Postfix-Notation:
int x = 1, y = 1; printf("%d", x++); // 1 printf("%d", ++y); // 2 - Die Größe von Datentypen ist Compilerabhängig
- Typen mit vorgegebener Breite:
- Sind seit C99 in
<stdint.h>enthalten, z.B.: intN_t,uintN_tExakte Breite vonNBit (nicht im Standard)int_leastN_t,uint_leastN_tMindestens eine Breite von N Bits- …
- Sind seit C99 in
- Manche Gleitkommazahlen lassen sich nicht komplett Darstellen, z.B. Zahlen mit Periode
- Für genauere Darstellung statt float dann double oder long double hernehmen
- Ternärer Operator:
eval ? [...] : [...]
27. Qualifizierer
- Typmodifizierer mit register 1 und volatile
- const