1. Algorithmus

2. CPU, Programmiersprachen

3. Zahlenrepräsentationen

4. Datentypen

5. Sprachdefinition

6. Kontrollfluss

7. Compiler und IDE

8. Funktionen

9. Zeiger

10. Felder und Zeichenketten

11. Ein- und Ausgabe

Fazit

  • Am besten fgets zum Einlesen von char[] als Strings verwenden
  • In C++: cin und cout mit String als Objekte

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

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

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

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_t Exakte Breite von N Bit (nicht im Standard)
    • int_leastN_t, uint_leastN_t Mindestens eine Breite von N Bits
  • 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