Vorschau auf das nächste Semester, noch nicht veröffentlicht.
Zur aktuellen Seite

Warm-ups (freiwillig)

Sie müssen nicht alle Warm-ups machen. Suchen Sie sich in der Tabelle das heraus, was Ihnen für eine Aufgabe fehlt:

ÜbtHilft bei
Warm-up 1Adressen ausgeben mit &Vorlesung 4 (Pointer)
Warm-up 2Pointer: über eine Adresse lesen und schreibenVorlesung 4 (Pointer)

Legen Sie für die Warm-ups eine eigene Datei an, zum Beispiel warmup_aufgaben_1.c für Übung 1, im selben Ordner wie Ihre Übungsaufgaben. Die meisten Warm-ups bauen aufeinander auf: Sie ergänzen die Datei Schritt für Schritt. Lösungen gibt es für die Warm-ups nicht. Unter „Wo zu finden?“ steht jeweils, wo das Thema in Vorlesung und Shorts vorkommt. Mehr dazu im FAQ zu den Warm-ups.

Warm-up 1: Adressen ausgeben mit &

Kopieren Sie das folgende Code-Snippet und ersetzen Sie den Kommentar, sodass die Adresse von buffer ausgegeben wird. Erinnern Sie sich, dass Sie mit & auf die Adresse einer Variablen zugreifen können.

#include <cs50.h>
#include <stdio.h>

int main(void)
{
    char buffer;

    printf("An der Adresse %p liegt der Inhalt '%c'.\n", /* Adresse des Buffers */, buffer);



    return 0;
}

Führen Sie das Programm mehrfach aus. Was fällt Ihnen auf?

Wo zu finden?
Bei Problemen und Unklarheiten schauen Sie sich am besten noch einmal die Notizen zu den Programmen addresses.c und garbage.c aus der Vorlesung 4. Memory sowie das Short zu Pointern an.

Warm-up 2: Pointer: über eine Adresse lesen und schreiben

Fügen Sie zwischen printf und return folgenden Code ein:

   char *pointer = &buffer;

   *pointer = 'A';

   printf("An der Adresse %p (Ausgabe `pointer`) liegt der Inhalt '%c' (Ausgabe `buffer`) / '%c' (Ausgabe `*pointer`).\n", pointer, buffer, *pointer);

   buffer = 'B';

   printf("An der Adresse %p (Ausgabe `pointer`) liegt der Inhalt '%c' (Ausgabe `buffer`) / '%c' (Ausgabe `*pointer`).\n", pointer, buffer, *pointer);

Führen Sie das Programm aus und vollziehen Sie die Ausgabe nach. Was passiert jeweils bei den Zuweisungen?

Erinnerung: Ein Pointer ist letztlich nur eine Variable, deren Inhalt eine Adresse ist. Der Typ des Pointers bezieht sich dabei auf den Inhalt, der an dieser Adresse zu finden ist. Dadurch weiß der Compiler beim Dereferenzieren, wie viele Bytes ab dieser Adresse gelesen werden müssen, um einen Wert des entsprechenden Typs zu erhalten. Bei einem char-Pointer wäre dies z.B. 1 Byte (8 Bit), da ein char in C 1 Byte groß ist.

Visualisieren Sie sich dies am besten einmal mit einer Handzeichnung
  • Welche Werte stehen an der jeweiligen Stelle?
  • Worauf kann mit welcher Syntax zugegriffen werden? Ordnen Sie buffer, &buffer, pointer, &pointer und *pointer den entsprechenden Boxen zu.
  • Nutzen Sie Pfeile, um Verbindungen zwischen den Inhalten zu visualisieren.
  • Vollziehen Sie dann den Code (d.h. die Zuweisungen und die daraus resultierenden Veränderungen) anhand Ihrer Zeichnung nach. Adresse, Inhalt und Pointer
Wo zu finden?
Bei Problemen und Unklarheiten schauen Sie sich am besten noch einmal die Notizen der Vorlesung 4. Memory zum Speicher und Pointern sowie das Short zu Pointern an.