Programmieren mit C Flashcards

(35 cards)

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
Was kann man mit Zeigern machen?
- Addition und Substraktion - Vergleichen - Zeiger auf Zeiger - Zeiger auf Funktionen - Zeiger als Argument von Funktionen
26
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)
27
Was sind rekursive Funktionen?
Funktionen, die sich selbst aufrufen
28
Was sind Strukturen in C?
- Mittel, um unterschiedliche Datentypen unter einem Namen zusammenzufassen - vgl. Objekte von Klassen - Variablen in Strukturen werden Mitglieder genannt
29
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
30
Was sind Callback-Funktionen?
Funktionen, die andere Funktionen als Parameter akzeptieren
31
Wann ist dynamische Speicherverwaltung nützlich?
Wenn Größe und Anforderungen an den Speicher erst zur Laufzeit bekannt werden
32
Was macht malloc?
Speicherplatz einer bestimmen Größe im Heap (mit undefinierten Daten) reservieren
33
Was macht calloc?
Speicherplatz einer bestimmten Größe im Heap mit Initialwert 0 reservieren
34
Was macht realloc?
Größe eines zuvor reservierten Speicherblocks ändern
35
Was macht free?
reservierten Speicher wieder freigeben