Suche
Suche Menü

Beispiele

In diesem Beispiel realisieren wir unsere addieren() – Funktion nur mit Zeigern. Es werden also keine Werte übergeben, sondern nur Verweise auf die Speicherstellen.

#include<stdio.h>

void addiere(int *summand1, int *summand2, int *summe) {
	*summe = *summand1 + *summand2;
}

int main() {
	int zahl1 = 666666666;
	int zahl2 = 333333333;
	int summe;
	
	addiere(&zahl1, &zahl2, &summe);
	
	printf("Summe von zahl1 und zahl2: %d\n", summe);
	return 0;
}

Summe von zahl1 und zahl2: 999999999

Veranschaulichung des Zusammenspiels von Adresse und Wert

Mit der Ausgabe-Formatierung %p kann die Adresse eines Zeigers ausgegeben werden. Die Adressen sind höchstwahrscheinlich bei jedem Aufruf des Programms  anders, da sich der freie Speicherbereich durch andere Programme ständig ändert und das eigene Programm somit immer an einem anderen Platz landet. Dies stört uns aber nicht weiter. Wir freuen uns darüber, dass sich die Programmiersprache und das Betriebssystem im Hintergrund um die Zuteilung von Speicherplatz kümmern.

int zahl=7;
int *zeiger = &zahl;

printf("Adresse zahl: %p\n", &zahl);
printf("Wert zahl: %d\n\n", zahl);
printf("Adresse zeiger: %p\n", &zeiger);
printf("Wert zeiger: %p\n", zeiger);
printf("Wert von Adresse %p: %d\n", zeiger, *zeiger);

Adresse zahl: 0xbfefbcf0
Wert zahl: 7

Adresse zeiger: 0xbfefbcec
Wert zeiger: 0xbfefbcf0
Wert von Adresse 0xbfefbcf0: 7

Zeiger auf Zeiger

Zeiger zeigen auf Adressen. Sie können nicht nur auf die Adressen von Variablen, sondern auch auf die Adressen von Zeigern verweisen. Dies erreicht man mit dem doppelten Stern-Operator **.

int zahl=7;
int *zeiger = &zahl;
int **zeigerAufZeiger = &zeiger;

printf("Wert von zeigerAufZeiger -> zeiger -> zahl: %d\n", **zeigerAufZeiger);

Wert von zeigerAufZeiger -> zeiger -> zahl: 7