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