|
|
|
|
|
|
|
|
| .. Zeiger incrementieren und decrementieren | ||
|
|
||
|
|
Wird ein Zeiger inkrementiert (um 1 erhöht) oder dekrementiert (um 1 vermindert), so verhält er sich anders als eine Variable vom Typ Integer. Deren Speicherzellen_Inhalt würde sich um 1 erhöhen oder um 1 vermindern.
Der Inhalt von Zeigern hingegen wird durch die Befehlszeilen 'z = z+1oder z++' bzw. 'z = z-1 oder z--' soweit erhöht / vermindert, dass er auf die Anfangsadresse der nächsten Variablen zeigt, für deren Typ er definiert wurde. Ein Zeiger auf double würde also durch die Befehlszeilen um 8 erhöht oder vermindert werden, ein Zeiger auf int um 2. Dadurch zeigt der Zeiger sofort auf den Anfang der nächsten Variablen.
Das folgende Programm soll diesen Sachverhalt vorführen. Hierbei stellt sich allerdings die Frage, wie kann man sicherstellen, dass auch wirklich die erzeugten doppeltgenauen Variablen hintereinander im Speicher angelegt werden? Eine Integervariable dazwischen würde das Zeigermodell doch augenscheinlich durcheinanderbringen! Die Antwort ist einfach. Man muss ein Array von Fliesskommazahlen anlegen. Schreibt man folgendes ... |
|
|
|
|
|
double x[] = {1.2, 2.4, 3.6, 4.8} ;
// Deklaration, Definition, Initialisation
// des Arrays x mit 4 doppeltgenauen
// Fliesskommazahlen.
|
||
|
|
|
|
|
|
Dann werden im Speicher 4 Fliesskommazahlen von je 8 Byte Speicherumfang, hintereinander abgelegt. Durch die folgende Anweisung wird ein Zeiger auf die erste Speicherzelle dieses Arrays gerichtet |
|
|
|
|
|
double *z = x; // Deklaration, Definition, Initialisation
// des Zeigers z, der auf doppeltgenaue
// Fliesskommazahlen zeigt
|
||
|
|
|
|
|
|
|
|
|
|
|
|
#include <conio.h>
void main (void)
{
double x[] = {5.123, 7.234};
double *z;
z = x;
printf ("\nInhalt von x1: x[0] = %f", *z); // Wert x[0]
z = z+1;
printf ("\nInhalt von x2: x[1] = %f", *z); // Wert x[1]
z = z-1;
printf ("\nInhalt von x1: x[0] = %f", *z); // Wert x[0]
}
|
||
|
|
|
|
|
|
Wenn jetzt bereits jemand mit Arrays gearbeitet hat wird er sich fragen, warum geht der hier so umständlich mit Werten aus Arrays um? Wenn man den zweiten Wert eines Arrays haben will, dann muss man doch nur x[1] schreiben! Richtig, aber das Thema lautete, was passiert wenn ein Zeiger incrementiert / decrementiert wird .. und das funktioniert wie oben beschrieben. Nebenbei x[1] ist auch ein Zeiger man könnte auch schreiben *(x+1) |
|
|
|
|
|
.de