Aufgabe 1 – Erste Schritte mit Pointern

Deklariere eine int-Variable und einen Pointer darauf. Gib den Wert der Variable, die Adresse der Variable und die Adresse des Pointers aus.

Musterlösung: Erste Schritte mit Pointern
int a = 10;
int *p = &a;

printf("a = %d\n", a);
printf("&a = %p\n", (void*)&a);
printf("&p = %p\n", (void*)&p);

Aufgabe 2 – Wert über Pointer ausgeben

Erstelle eine Variable und gib ihren Wert einmal direkt aus und einmal über den Pointer mittels Dereferenzierung.

Musterlösung: Wert über Pointer ausgeben
int a = 7;
int *p = &a;

printf("%d\n", a);
printf("%d\n", *p);

Aufgabe 3 – Wert über Pointer verändern

Ändere den Wert einer Variable über den Pointer und gib danach die Variable aus.

Musterlösung: Wert über Pointer verändern
int a = 5;
int *p = &a;

*p = 42;
printf("a = %d\n", a);

Aufgabe 4 – Pointer und Rechenoperationen

Erhöhe den Wert einer Variable um 10 – über den Pointer.

Musterlösung: Pointer und Rechenoperationen
int a = 3;
int *p = &a;

*p = *p + 10;
printf("a = %d\n", a);

Aufgabe 5 – Doppelter Pointer

Deklariere einen int, einen Pointer darauf und einen Pointer auf diesen Pointer. Gib den Wert über doppelte Dereferenzierung aus.

Musterlösung: Doppelter Pointer
int a = 10;
int *p = &a;
int **pp = &p;

printf("%d\n", **pp);

Aufgabe 6 – Funktion mit Pointerparameter

Schreibe eine Funktion setToZero(int *p), die eine Variable auf 0 setzt.

Musterlösung: Funktion mit Pointerparameter
void setToZero(int *p) {
    *p = 0;
}

int a = 5;
setToZero(&a);
printf("%d\n", a);

Aufgabe 7 – Inkrementieren per Funktion

Schreibe eine Funktion inc(int *p), die den Wert um 1 erhöht. Teste sie.

Musterlösung: Inkrementieren per Funktion
void inc(int *p) {
    (*p)++;
}

int a = 9;
inc(&a);
printf("%d\n", a);

Aufgabe 8 – Rückgabe durch Pointer statt return

Schreibe eine Funktion compute(int x, int *result), die x*x berechnet und das Ergebnis in *result speichert.

Musterlösung: Rückgabe durch Pointer statt return
void compute(int x, int *result) {
    *result = x * x;
}

int r;
compute(6, &r);
printf("%d\n", r);

Aufgabe 9 – Zwei Pointer als Parameter

Schreibe eine Funktion swap(int *a, int *b), die zwei Variablen vertauscht.

Musterlösung: Zwei Pointer als Parameter
void swap(int *a, int *b) {
    int temp = *a;
    *a = *b;
    *b = temp;
}

int x = 3, y = 7;
swap(&x, &y);
printf("%d %d\n", x, y);

Aufgabe 10 – Double-Dereferenzierung in einer Funktion

Schreibe eine Funktion, die den Wert einer Variablen über einen Doppelpointer auf 100 setzt.

Musterlösung: Double-Dereferenzierung in einer Funktion
void set100(int **pp) {
    **pp = 100;
}

int a = 4;
int *p = &a;
set100(&p);

printf("%d\n", a);

Aufgabe 11 – Pointer überprüfen (NULL)

Schreibe eine Funktion safePrint(int *p), die den Wert nur ausgibt, wenn p nicht NULL ist.

Musterlösung: Pointer überprüfen (NULL)
void safePrint(int *p) {
    if (p != NULL)
        printf("%d\n", *p);
}

int a = 10;
safePrint(&a);
safePrint(NULL);

Aufgabe 12 – Array per Pointer an Funktion übergeben

Schreibe eine Funktion printArray(int *arr, int n), die die Elemente ausgibt.

Musterlösung: Array per Pointer an Funktion übergeben
void printArray(int *arr, int n) {
    for (int i = 0; i < n; i++)
        printf("%d ", arr[i]);
}

int arr[] = {1,2,3};
printArray(arr, 3);

Aufgabe 13 – Größtes Element per Pointer zurückgeben

Schreibe eine Funktion
void maxElement(int *arr, int n, int *out)
die das größte Element eines Arrays in *out speichert.

Musterlösung: Größtes Element per Pointer zurückgeben
void maxElement(int *arr, int n, int *out) {
    int max = arr[0];
    for (int i = 1; i < n; i++)
        if (arr[i] > max)
            max = arr[i];

    *out = max;
}

int arr[] = {3, 8, 5};
int r;
maxElement(arr, 3, &r);
printf("%d\n", r);

Aufgabe 14 – Pointer-Arithmetik mit Arrays

Nutze nur Pointer-Arithmetik (keine arr[i] Syntax), um ein Array auszulesen.

Musterlösung: Pointer-Arithmetik mit Arrays
int arr[] = {2, 4, 6, 8};
int *p = arr;

for (int i = 0; i < 4; i++)
    printf("%d ", *(p + i));

Aufgabe 15 – Ergebnisse über mehrere Pointer verändern

Schreibe eine Funktion:

void stats(int *arr, int n, int *sum, int *avg)

die Summe und Durchschnitt über Pointer berechnet.

Musterlösung: Ergebnisse über mehrere Pointer verändern
void stats(int *arr, int n, int *sum, int *avg) {
    int s = 0;
    for (int i = 0; i < n; i++) s += arr[i];

    *sum = s;
    *avg = s / n;
}

int arr[] = {5, 10, 15};
int sum, avg;

stats(arr, 3, &sum, &avg);

printf("Summe = %d, Durchschnitt = %d\n", sum, avg);
Nach oben scrollen