Programmieren mit C Flashcards

1
Q

Wann und von wem wurde C entwickelt?

A

erste Version 1972
von Dennis Ritchie
bei Bell Labs

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Auf welchen Vorgängersprachen basiert C?

A

BCPL und B

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Was hat zur Verbreitung der Sprache beigetragen?

A
  • wurde schnell Hauptsprache für Entwicklung von Unix
    -1978 das “K&R”-Buch, “The C Programming Language” von Brian Kernighan und Dennis Ritchie
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Was der aktuelle C-Standard?

A

C18-Standard von 2018

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Was sind Anwendungsgebiete von C?

A

universelle Sprache
- Systemprogrammierung (u.a. Unix und Linux)
- eingebette Systeme (IoT)
- Anwendungssoftware (z.B: MySQL)
- Spieleentwicklung (verbreiteter ist C++)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Welche 5 Vorteile hat C?

A
  • bietet direkten Zugriff auf Hardware
  • effizientes Ressourcenmanagement
  • Leistungsfähig
  • Portabilität (auf verschiedene Plattformen und Architekturen)
  • gute Lern-Sprache
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Welchen Einfluss hatte C auf andere Sprachen?

A
  • C++, C#, Objective C, Java u.a. haben Syntax, Konzepte, Paradigmen von C übernommen
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Was sind Präprozessor-Direktiven?

A
  • beginnen in C mit #
  • werden vom Präprozessor vor der Kompilierung des Codes verarbeitet
  • z.B. #include bindet Header-Dateien ein
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Wie werden Strings in C behandelt?

A

-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’)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Was sind Konstanten?

A

unveränderliche Werte, die einmal fest definiert werden
- gut für Lesbarkeit und gegen Fehler

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Was sind Literale?

A

direkte Werte, die im Code verwendet werden
- mit oder ohne Zuweisung zu Variablen

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Was sind magische Zahlen?

A

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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Was sind die 5 wichtigsten Kontrollstrukturen in C?

A
  • if-Verzweigung
  • switch-Verzweigung
  • for-Schleife
  • while-Schleife
  • do-while-Schleife
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Was ist ein Zeiger (in C)?

A
  • 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
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Was sind Vorteile und Funktionen der Verwendung von Zeigern (in C)?

A
  • man kann direkt mit Speicheradressen arbeiten
  • flexibele und effiziente Arbeit mit Daten im Speicher
  • dynamische Speicherverwaltung
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Was ist die Dereferenzierung eines Zeigers p?

A
  • Zugriff nicht auf die Speicheradresse, sondern auf den Wert der angezeigten Variable
  • markiert durch *p
17
Q

Was ist der Adressoperator in C?

A
  • markiert durch &
  • gibt den Speicherort der Variablen an (egal, ob es einen Pointer gibt oder nicht)
18
Q

In welcher Notation werden Speicheradressen angegeben?

A

in Hexadezimalzahlen

19
Q

Auf welchem Speicher liegen reguläre Variablen ohne Pointer?

A

auf einer Adresse im Stack

20
Q

Wenn j ein Pointer ist,
was bedeutet &j, j und *j?

A

&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)

21
Q

Was sind Eigenschaften des Stack-Speichers?

A
  • für lokale Variablen und Funktionsaufrufe
  • sehr schnell
  • automatische Verwaltung
  • begrenzte Größe
22
Q

Was sind Eigenschaften des Heap-Speichers?

A
  • 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
23
Q

Wie groß ist der Speicherplatz auf einer Speicheradresse im RAM?

24
Q

Wie viel Speicherplatz braucht ein Zeiger?

A

4 Bytes, weil die enthaltene Speicheradresse immer eine Hexadezimalzahl ist

25
Q

Was kann man mit Zeigern machen?

A
  • Addition und Substraktion
  • Vergleichen
  • Zeiger auf Zeiger
  • Zeiger auf Funktionen
  • Zeiger als Argument von Funktionen
26
Q

Was ist der Unterschied von Funktionen, die Werte mit Call by Value oder Call by Reference verwenden?

A
  • 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)
27
Q

Was sind rekursive Funktionen?

A

Funktionen, die sich selbst aufrufen

28
Q

Was sind Strukturen in C?

A
  • Mittel, um unterschiedliche Datentypen unter einem Namen zusammenzufassen
  • vgl. Objekte von Klassen
  • Variablen in Strukturen werden Mitglieder genannt
29
Q

Was sind Funktionszeiger?

A

Zeiger, die auf den Speicherort einer Funktion zeigen
- z.B. zum dynamischen einer Funktion aus einem Array von Funktionszeigern
- z.B. in Callback-Funktionen

30
Q

Was sind Callback-Funktionen?

A

Funktionen, die andere Funktionen als Parameter akzeptieren

31
Q

Wann ist dynamische Speicherverwaltung nützlich?

A

Wenn Größe und Anforderungen an den Speicher erst zur Laufzeit bekannt werden

32
Q

Was macht malloc?

A

Speicherplatz einer bestimmen Größe im Heap (mit undefinierten Daten) reservieren

33
Q

Was macht calloc?

A

Speicherplatz einer bestimmten Größe im Heap mit Initialwert 0 reservieren

34
Q

Was macht realloc?

A

Größe eines zuvor reservierten Speicherblocks ändern

35
Q

Was macht free?

A

reservierten Speicher wieder freigeben