INFORMATIK I
Übung 7 : Pointers
15. April 2015
Daniel Hentzen
dhentzen@student.ethz.ch

Übung 6 : Kontrollfluss
Fakultät
Beispiel : 4! = (1 *) 2 * 3 * 4 = 24
--> in Algorithmus umwandeln ?!
--> SCHLEIFE !
Beispiel : 4! = (1 *) 2 * 3 * 4 = 24
- Index ?
- 2 - 4 --> 1 - n
- fak = 1;
- 1. Schritt (i = 2) : (1) * 2 --> 1 * i
- 2. Schritt (i = 3) : (1 * 2) * 3 --> (1 * 2) * i
- 3. Schritt (i = 4) : (1 * 2 * 3) * 4 --> (1 * 2 * 3) * i
Allgemein :
fak(i) = fak * i
fak = 1 // Anfangswert ! for (int i = 2; i < n+1; i++) { fak = fak * i; }
int result = fak;

Primzahlen
Theorie
Pointers
Pointers und arrays
Dynamic memory allocation
Dynamic arrays
Dynamic structs
Pointers
("Zeiger")
- Speicher (RAM)
- Ansammlung von Speicherblöcken
- jeder Block hat eine Adresse
- Variablendefinition = Zuweisung von Speicherplatz
- Wert wird an einer bestimmten Adresse gespeichert
Pointer =
Variable, die Adressen speichert
Syntax
-
*
- Definition eines Pointers oder
- Dereference operator --> gibt den Wert an der Adresse
- &
- Reference operator : Adresse von...

- Speicher zuweisen in runtime
- Bspl : mit array arbeiten, dessen Grösse erst bei der Ausführung vom Benutzer definiert wird
- Pointers als Funktionsargumente übergeben
- erlaubt es, Werte ausserhalb des Gültigkeitsbereich zu ändern
Aufgabe 1 : Pointeranalyse
Pointers und Arrays

Pointer Arithmetik


Aufgabe 2 : Pointerarithmetik

Dynamic Memory Allocation
- bisher : benötigter Speicherplatz wurde vor der Ausführung bestimmt, durch Definition von Variablen
- was, wenn benötigter Speicherplatz erst beim Ausführen des Programms bestimmt werden kann ?
- Bspl : falls abhängig vom User Input?
--> Dynamic Memory Allocation mit new / delete
new / delete
- new Operator
- weist Speicher dynamisch zu und gibt Adresse zurück
- dieser Speicher muss wieder gelöscht werden!
- delete Operator
- macht Speicher an einer gegebenen Adresse frei
<type> *name = new <type>;
<type> *name = new <type> [number of elements]; // dynamic array
int *a = new int;
*a = 5;
delete a;
Statisch
int x;
- Speicher gültig, solange Variable gültig ist (scope)
- --> Speicher wird implizit am Ende des scopes gelöscht
- kann nicht ausserhalb des scopes geändert werden
Dynamisch
int *x = new int;
- Speicher gültig, bis delete
- Speicher "reserviert" bis delete
- kann ausserhalb des scopes geändert werden
Dynamic Arrays
- new erlaubt es, die Grösse beim Ausführen zu definieren

Dynamic structs
Zusammenfassend
- Pointers speichern Adressen, keine Werte
- Adresse einer Variable mit &
- Wert an der Adresse mit *
- dynamischer Speicherplatz mit new
- frei machen mit delete / delete[ ]
Übung 7 : Pointers
Aufgabe 1 : Pointeranalyse
Aufgabe 2 : Pointerarithmetik
Aufgabe 3 : Vektoren
Norm berechnen

c = a + b

Aufgabe 4 : Punkteliste
Zufallszahlen

3 grösste Elemente einer Liste
max1 = 0;
max2 = 0;
max3 = 0;

Aufgabe 5 : Unix : User, Gruppen und ssh
Übung 7 : Pointers
By Daniel Hentzen
Übung 7 : Pointers
- 723