Programmieren mit C Flashcards
Wann und von wem wurde C entwickelt?
erste Version 1972
von Dennis Ritchie
bei Bell Labs
Auf welchen Vorgängersprachen basiert C?
BCPL und B
Was hat zur Verbreitung der Sprache beigetragen?
- wurde schnell Hauptsprache für Entwicklung von Unix
-1978 das “K&R”-Buch, “The C Programming Language” von Brian Kernighan und Dennis Ritchie
Was der aktuelle C-Standard?
C18-Standard von 2018
Was sind Anwendungsgebiete von C?
universelle Sprache
- Systemprogrammierung (u.a. Unix und Linux)
- eingebette Systeme (IoT)
- Anwendungssoftware (z.B: MySQL)
- Spieleentwicklung (verbreiteter ist C++)
Welche 5 Vorteile hat C?
- bietet direkten Zugriff auf Hardware
- effizientes Ressourcenmanagement
- Leistungsfähig
- Portabilität (auf verschiedene Plattformen und Architekturen)
- gute Lern-Sprache
Welchen Einfluss hatte C auf andere Sprachen?
- C++, C#, Objective C, Java u.a. haben Syntax, Konzepte, Paradigmen von C übernommen
Was sind Präprozessor-Direktiven?
- beginnen in C mit #
- werden vom Präprozessor vor der Kompilierung des Codes verarbeitet
- z.B. #include bindet Header-Dateien ein
Wie werden Strings in C behandelt?
-als Arrays von Char
-Variablen sind immer Zeiger auf erste Speicherstelle des Arrays
- einziger Arraytyp in C, bei dem die Speichergröße nicht deklariert, sondern automatisch berechnet wird
- enden immer mit Nullterminierungszeichen (‘\0’)
Was sind Konstanten?
unveränderliche Werte, die einmal fest definiert werden
- gut für Lesbarkeit und gegen Fehler
Was sind Literale?
direkte Werte, die im Code verwendet werden
- mit oder ohne Zuweisung zu Variablen
Was sind magische Zahlen?
die Verwendung von Werte im Code, deren Inhalt sich erstmal nicht erschließt
- z.B. auf den ersten Blick unklare Wahl einer bestimmten Zahl
- besser: eindeutige Benennung
Was sind die 5 wichtigsten Kontrollstrukturen in C?
- if-Verzweigung
- switch-Verzweigung
- for-Schleife
- while-Schleife
- do-while-Schleife
Was ist ein Zeiger (in C)?
- eine Variable, die die Adresse einer anderen Variable speichert (und nicht den tatsächlichen Wert der Variable)
- gibt immer die erste Adresse an, die ein Wert in Anspruch nimmt
- weil der Datentyp im Zeiger deklariert wird, ist implizit bekannt, wie weit der Wert im Speicher noch reicht
Was sind Vorteile und Funktionen der Verwendung von Zeigern (in C)?
- man kann direkt mit Speicheradressen arbeiten
- flexibele und effiziente Arbeit mit Daten im Speicher
- dynamische Speicherverwaltung
Was ist die Dereferenzierung eines Zeigers p?
- Zugriff nicht auf die Speicheradresse, sondern auf den Wert der angezeigten Variable
- markiert durch *p
Was ist der Adressoperator in C?
- markiert durch &
- gibt den Speicherort der Variablen an (egal, ob es einen Pointer gibt oder nicht)
In welcher Notation werden Speicheradressen angegeben?
in Hexadezimalzahlen
Auf welchem Speicher liegen reguläre Variablen ohne Pointer?
auf einer Adresse im Stack
Wenn j ein Pointer ist,
was bedeutet &j, j und *j?
&j = Speicherort des Pointers auf dem Stack
j = Inhalt des Pointers (-> Adresse einer anderen Variablen, i.d.R. auf dem HEAP)
j* = Wert der ausgewiesenen Variablen (i.d.R. im HEAP)
Was sind Eigenschaften des Stack-Speichers?
- für lokale Variablen und Funktionsaufrufe
- sehr schnell
- automatische Verwaltung
- begrenzte Größe
Was sind Eigenschaften des Heap-Speichers?
- dynamischer Speicher
- für allokierte Speicherbereiche (etwa mit malloc)
- langsamer als der Stack
- größerer Speicher als der Stack
- Speicher muss manuell reserviert und freigegeben werden
Wie groß ist der Speicherplatz auf einer Speicheradresse im RAM?
1 Byte
Wie viel Speicherplatz braucht ein Zeiger?
4 Bytes, weil die enthaltene Speicheradresse immer eine Hexadezimalzahl ist
Was kann man mit Zeigern machen?
- Addition und Substraktion
- Vergleichen
- Zeiger auf Zeiger
- Zeiger auf Funktionen
- Zeiger als Argument von Funktionen
Was ist der Unterschied von Funktionen, die Werte mit Call by Value oder Call by Reference verwenden?
- von Werten mit CbV wird eine Kopie in der Funktion verwendet, der ursprüngliche Wert ändert sich nicht
- auf Werte mit CbR wird direkt zugegriffen, sie können innerhalb einer Funktion verändert werden (ohne dass sie zurückgegen werden müssen)
Was sind rekursive Funktionen?
Funktionen, die sich selbst aufrufen
Was sind Strukturen in C?
- Mittel, um unterschiedliche Datentypen unter einem Namen zusammenzufassen
- vgl. Objekte von Klassen
- Variablen in Strukturen werden Mitglieder genannt
Was sind Funktionszeiger?
Zeiger, die auf den Speicherort einer Funktion zeigen
- z.B. zum dynamischen einer Funktion aus einem Array von Funktionszeigern
- z.B. in Callback-Funktionen
Was sind Callback-Funktionen?
Funktionen, die andere Funktionen als Parameter akzeptieren
Wann ist dynamische Speicherverwaltung nützlich?
Wenn Größe und Anforderungen an den Speicher erst zur Laufzeit bekannt werden
Was macht malloc?
Speicherplatz einer bestimmen Größe im Heap (mit undefinierten Daten) reservieren
Was macht calloc?
Speicherplatz einer bestimmten Größe im Heap mit Initialwert 0 reservieren
Was macht realloc?
Größe eines zuvor reservierten Speicherblocks ändern
Was macht free?
reservierten Speicher wieder freigeben