Aufgabe 1 – Arrayname als Pointer
Gegeben ist folgender Code:
int arr[3] = {10, 20, 30};
int* p = arr;
- Auf welches Array-Element zeigt
p? - Welchen Wert liefert
*p?
Musterlösung: Arrayname als Pointer
pzeigt aufarr[0]*pliefert den Wert10
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;
}