Atari Logo
Atari Computer

Hauptseite -
Welches System? -
Hardware -
Software -
Emulatoren -
Internet
MausNet
Programmieren
Verweise
Über

C

Home Zeiger Zeiger Zeiger und Strukturen

8.7.1 Zeiger und Felder

Zeiger und Felder sind in C verwandt und beide Darstellungsarten können zum Teil alternativ benutzt werden. Der Name eines Feldes ohne die eckigen Klammern entspricht der Anfangsadresse eines Feldes und kann einem Zeiger auf den Datentyp der Feldelemente zugewiesen werden. An den Namen des Feldes kann natürlich keine Zuweisung erfolgen. Durch die die Deklaration des Feldes ist der dazugehörige Speicher angelegt worden und kann deshalb nicht mehr verlegt werden.

...
int *x;   /* Zeiger auf einen int */
int f[3]; /* Feld mit 3 int */
x = f;    /* x zeigt jetzt auf das erste Element von f */
f = x;    /* verboten !! */

Um den Pointer auf das nächste Feldelement zu setzen, ist es nicht nötig, diese Adresse dem Pointer zuzuweisen. Auch mit Pointern ist Arithmetik möglich. Wird ein Wert zu einem Pointer addiert oder von einem Pointer subtrahiert, so wird der Pointer tatsächlich um den Wert multipliziert mit der Größe des Datentyps verändert. Wird in obigen Beispiel x++; als nächste Anweisung geschrieben, so zeigt x auf den nächsten int, also auf f[1] und nicht auf das nächste Byte im Speicher.

...
int *x;   /* Zeiger auf einen int */
int f[3]; /* Feld mit 3 int */

x = f;    /* x zeigt auf f[0] */
x++;      /* x zeigt auf f[1] */
x++;      /* x zeigt auf f[2] */
x++;      /* x zeigt hinter f!! */

Da keine Überprüfung stattfinden kann, ist es auch möglich, den Zeiger auf Speicher zeigen zu lassen, der von uns nicht in irgendeiner Form reserviert wurde. Damit werden möglicherweise Variablen überschrieben, die noch anderweitig benötigt werden. Ein Absturz des Programms kann die Folge sein.

Es läßt sich auch mit der Pointerschreibweise auf ein Feld zugreifen.

...
int i,f[[3];

i = *f;
i = *(f+1);  /* entspricht i = f[1]; */

Und die Feldschreibweise kann auf Pointer angewandt werden.

...
int i,*p;

i = f[0];
i = p[1];

Home Zeiger Zeiger Zeiger und Strukturen


Best viewed with any browser English version not yet available.

Änderungen und Irrtümer vorbehalten. Letzte Änderung:
14 September 2001.
Home - Mail an den Webmaster - Impressum