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 Funktionvoid 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);