Sitzung: Jeden Freitag in der Vorlesungszeit ab 16 Uhr c. t. im MAR 0.005. In der vorlesungsfreien Zeit unregelmäßig (Jemensch da?). Macht mit!

C-Kurs/(Pointer) Swapping

  1. Schreibe eine Funtion swap, die zwei Integers vertauscht.
    Hinweis: Du musst Zeiger auf die Integer-Variablen übergeben.
    Definiere zwei Integer-Variablen, gib sie auf dem Bildschirm aus, vertausche sie und gib sie erneut aus.
  2. a) Schreibe eine Funktion print_int_array, die ein Integer-Array auf dem Bildschirm ausgibt.
    b) Vertausche die Elemente zweier gleichlanger Integer-Arrays elementweise. Benutze dazu die Funktion swap aus der ersten Aufgabe. Gib die Arrays vor und nach dem Vertauschen mittels print_int_array aus.
  3. Schreibe nun eine Funktion, die zwei Integer-Pointer vertauscht. Benutze nicht calloc, sondern definiere zwei Integer-Variablen i und j und speichere deren Adressen in zwei Pointer-Variablen p1 und p2. Gib vor und nach dem Tauschen p1 und p2 aus, dereferenziere p1 und p2 und gib das Ergebnis ebenfalls vor und nach dem Vertauschen aus. Gib ausserdem i und j aus.
    Welche Ergebnisse erwartest du?
    Mache dir am Besten, bevor du mit dem Programmieren beginnst, eine kleine Zeichnung auf Papier und diskutiere sie mit einem Tutor.
  4. Die Funktion aus Aufgabe 2 hat den Nachteil, für große Arrays sehr ineffizient zu sein, da die swap-Funktion für jedes einzelne Element aufgerufen werden muss.
    Schreibe ein Programm, das zwei Integer-Arrays (nicht deren Inhalte!) vertauscht.
    Verwende der Einfachheit halber calloc, um die Arrays anzulegen.
    Benutze zur Ausgabe wieder die Funktion print_int_array aus Aufgabe 2.
    Hinweis: Wenn du Aufgabe 3 gelöst hast, ist die Aufgabe einfach. Zum Verständnis kann es wieder hilfreich sein, das Problem auf Papier aufzumalen.
  5. Mache die swap-Funktion aus Aufgabe 3 generisch, so dass sie für beliebige Typen von Pointern funktioniert.
    Benutze hierzu void-Pointer. Vergiss das Casten beim Aufruf nicht!
    Teste die Funktion zunächst mit Integer- , dann mit Float-Pointern.
  6. Dein Ziel ist, egal für welche Typen von Argumenten, immer eine einheitliche Funktion swap() aufrufen zu können, und nicht swap_int, swap_float... Wie würdest das Problem in Java lösen, wo es keine void-Pointer gibt? Was müsstest du der swap-Methode als Argument übergeben, um zwei Arrays zu tauschen?
    Warum funktioniert das mit dem Generischmachen leider so nicht für die swap-Funktion aus Augabe 1? Wenn es dir nicht sofort klar ist, probiere es aus und sieh dir die Fehlermeldung des Compilers an. Funktioniert der Ansatz, den du in Java gewählt hast, auch in c?