6 Zeiger in C

Das Konzept von C gestattet es, Daten nicht nur über den Variablennamen, sondern auch über ihre Adresse im Speicher anzusprechen. Dies geschieht über den sogenannten Zeiger bzw. Pointer.

Darüber hinaus bietet C dem Programmierer die Möglichkeit der Adress-Arithmetik, d. h. auf Zeiger können arithmetische Operationen wie Addition oder Vergleich direkt angewandt werden.

Wie alle Variablen in C müssen auch die Zeigervariablen deklariert werden. Damit können ihnen Werte zugewiesen und wieder ausgelesen werden. Sie verhalten sich also wie ganz normale Variablen.

Und obwohl eine Zeigervariable immer die Adresse der entsprechenden Variable darstellt, somit also stets vom selben Typ ist, muss ihr ein Datentyp zugewiesen werden. Der Grund hierfür liegt in der Adress-Arithmetik, die typgebunden ist.

Ein besonderer Typ von Zeiger ist das Feld. Der Feldname ist ein Zeiger auf das erste Feldelement.
 
 

6.1 Deklaration von Zeigern

Zeiger werden mit einem Variablennamen vereinbart, denen ein * vorangesetzt wird.

Beispiel 1:
 

char *zeichen;
int *zahl1, *zahl2;
char **zeichen;
 

In der letzten Zeile wird ein Zeiger auf einen Zeiger deklariert.

Beispiel 2:

typedef struct
{
char vorname[10];
char nachname[20];
} name;

name *name_zeiger;
int (*zeiger_fkt1)();
long *fkt2();

Die beiden letzten Zeilen zeigen, dass Zeiger auch auf Funktionen angewendet werden können. Bei der ersten Deklaration wird ein Zeiger auf eine Funktion vereinbart. Die Funktion zeiger_fkt1() liefert einen int-Wert. In der letzten Zeile wird eine Funktion fkt2() vereinbart, die als Ergebnis einen Zeiger liefert.
 
 

6.2 Die Handhabung von Zeigern

Über den Adress-Operator & kann mit der Adresse, auf die ein Zeiger verweist, gearbeitet werden. Der Inhalts-Operator * gestattet es, mit dem Inhalt zu arbeiten, der sich hinter der Adresse verbirgt.

Beispiel 3:

int zahl, *zeiger_zahl;
zahl= 3;
zeiger_zahl= &zahl;

printf("Adresse von zeiger_zahl ist %u\n", &zeiger_zahl);
printf("Inhalt von zeiger_zahl ist %u\n", zeiger_zahl);
printf("Wert von *zeiger_zahl ist %u\n", *zeiger_zahl);
 
 

. Struktur-Operator

Der Punkt-Operator wird zur Steuerung des Zugriffs auf Strukturkomponenten einer vereinbarten Struktur benutzt.
 
 

Beispiel:
person.vorname;
person.beruf;
 
 

-> Zeiger-Operator auf Strukturen

Der Zugriff auf Strukturen über Zeiger erfolgt mit dem Zeiger-Operator, auch Strukturverweiskomponente genannt.
 
 

Beispiel 4:
 
 
 
 

typedef struct
{
char vorname[10];
char nachname[20];
} name;

name *name_zeiger;
name kollegen[10];

name_zeiger= kollegen;
...
/* Variante ohne Zeiger und mit Zeiger */

printf("\nVorname: %s\n", kollegen[i].vorname);
printf("\nVorname: %s\n", name_zeiger->vorname);