Aufgabe 1 – Arrayname als Pointer

Gegeben ist folgender Code:

int arr[3] = {10, 20, 30};
int* p = arr;
  1. Auf welches Array-Element zeigt p?
  2. Welchen Wert liefert *p?
Musterlösung: Arrayname als Pointer
  • p zeigt auf arr[0]
  • *p liefert den Wert 10

Begründung:
Der Arrayname arr wird im Ausdruckskontext automatisch zu einem Pointer auf das erste Element (&arr[0]).


Aufgabe 2 – Pointer erhöhen

Was wird ausgegeben?

int arr[] = {1, 2, 3};
int* p = arr;

printf("%d\n", *p);
p++;
printf("%d\n", *p);
Musterlösung: Pointer erhöhen
1
2


Begründung:
p++ erhöht den Pointer um sizeof(int) Bytes und zeigt danach auf arr[1].


Aufgabe 3 – Index vs. Pointerarithmetik

Sind die folgenden Ausdrücke äquivalent?

arr[i]
*(arr + i)
*(p + i)
p[i]
Musterlösung: Index vs. Pointerarithmetik

Ja, alle vier Ausdrücke sind äquivalent, sofern p = arr.

Begründung:
Array-Zugriffe werden intern immer als Pointerarithmetik umgesetzt.


Aufgabe 4 – Vorwärtslauf mit Pointer

Was gibt das Programm aus?

int arr[] = {4, 8, 12};
int* p = arr;

for (int i = 0; i < 3; i++) {
    printf("%d ", *p);
    p++;
}
Musterlösung: Vorwärtslauf mit Pointer
4 8 12


Begründung:
Der Pointer wird bei jeder Iteration auf das nächste Array-Element verschoben.


Aufgabe 5 – Rückwärtslauf

Was wird ausgegeben?

int arr[] = {5, 10, 15};
int* p = arr + 2;

for (int i = 0; i < 3; i++) {
    printf("%d ", *p);
    p--;
}
Musterlösung: Rückwärtslauf
15 10 5

Begründung:
Der Pointer startet bei arr[2] und läuft rückwärts durch das Array.


Aufgabe 6 – Array mit Pointer ausgeben

Schreibe ein C-Programm, das ein Integer-Array mit mindestens 5 Elementen definiert und alle Elemente ausschließlich mit einem Pointer (ohne Indexzugriff []) ausgibt.

Vorgaben:

  • Kein Zugriff mit arr[i]
  • Nur Pointerarithmetik (*p, p++)
Musterlösung: Array mit Pointer ausgeben
#include <stdio.h>

int main() {
    int arr[] = {1, 2, 3, 4, 5};
    int* p = arr;

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

    return 0;
}

Aufgabe 7 – Summe eines Arrays mit Pointer berechnen

Implementiere eine Funktion mit der Signatur

int sum(int* p, int length);

die die Summe aller Elemente eines Arrays berechnet, ohne Indexoperatoren zu verwenden.

Musterlösung: Summe eines Arrays mit Pointer berechnen
#include <stdio.h>

int sum(int* p, int length) {
    int s = 0;

    for (int i = 0; i < length; i++) {
        s += *p;
        p++;
    }

    return s;
}

int main() {
    int arr[] = {3, 6, 9};
    printf("Summe: %d\n", sum(arr, 3));
    return 0;
}

Aufgabe 8 – Array rückwärts ausgeben

Schreibe eine Funktion, die ein Integer-Array rückwärts ausgibt.
Nutze dazu Pointerarithmetik.

Musterlösung: Array rückwärts ausgeben
#include <stdio.h>

void printReverse(int* p, int length) {
    p = p + length - 1;

    for (int i = 0; i < length; i++) {
        printf("%d ", *p);
        p--;
    }
}

int main() {
    int arr[] = {10, 20, 30, 40};
    printReverse(arr, 4);
    return 0;
}

Aufgabe 9 – Maximalwert mit Pointer ermitteln

Implementiere eine Funktion mit der Signatur

int max(int* p, int length);

die den größten Wert in einem Integer-Array findet.
Verwende ausschließlich Pointerarithmetik.

Musterlösung: Maximalwert mit Pointer ermitteln
#include <stdio.h>

int max(int* p, int length) {
    int m = *p;
    p++;

    for (int i = 1; i < length; i++) {
        if (*p > m)
            m = *p;
        p++;
    }

    return m;
}

int main() {
    int arr[] = {7, 3, 9, 4};
    printf("Max: %d\n", max(arr, 4));
    return 0;
}

Aufgabe 10 – Pointerarithmetik mit Teilarrays

Schreibe ein Programm, das ein Array definiert und anschließend nur die zweite Hälfte des Arrays mithilfe eines Pointers ausgibt.

Beispiel:

Array: 1 2 3 4 5 6
Ausgabe: 4 5 6
Musterlösung: Pointerarithmetik mit Teilarrays
#include <stdio.h>

int main() {
    int arr[] = {1, 2, 3, 4, 5, 6};
    int length = 6;

    int* p = arr + length / 2;

    for (int i = length / 2; i < length; i++) {
        printf("%d ", *p);
        p++;
    }

    return 0;
}

Nach oben scrollen