Eine Einführung in die Programmiersprache C und ... - C /C++ Ecke
Eine Einführung in die Programmiersprache C und ... - C /C++ Ecke
Eine Einführung in die Programmiersprache C und ... - C /C++ Ecke
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
<strong>E<strong>in</strong>e</strong> <strong>E<strong>in</strong>führung</strong> <strong>in</strong> <strong>die</strong> Informatik <strong>und</strong> <strong>die</strong> <strong>Programmiersprache</strong> C<br />
17.2 Po<strong>in</strong>terarithmetik<br />
Mit Zeiger kann auch gerechnet werden. Zeiger können <strong>in</strong>krementiert <strong>und</strong> dekrementiert werden,<br />
dabei werden sie jeweils um <strong>die</strong> Grösse des Datentyps auf den sie zeigen, verändert. Damit gelangt<br />
man zur nächsten Variablen desselben Typs, vorausgesetzt dass <strong>die</strong> Variablen genau h<strong>in</strong>tere<strong>in</strong>ander<br />
im Speicher liegen. Dies ist zum Beispiel bei e<strong>in</strong>em Array der Fall. Po<strong>in</strong>terarithmetik macht deshalb<br />
eigentlich nur bei Arrays S<strong>in</strong>n.<br />
Beispiel:<br />
char Text[] = "Hallo Welt";<br />
char *Ptr = &(Text[6]); /* Laesst Zeiger auf 'W' zeigen */<br />
putchar(*Ptr); /* Gibt 'W' aus */<br />
Ptr++; /* Setzt Zeiger um e<strong>in</strong>e Position vorwaerts ('e') */<br />
putchar(*Ptr++); /* Gibt 'e' aus <strong>und</strong> <strong>in</strong>krementiert Zeiger danach */<br />
putchar(*Ptr++); /* Gibt 'l' aus <strong>und</strong> <strong>in</strong>krementiert Zeiger danach */<br />
putchar(*Ptr++); /* Gibt 't' aus <strong>und</strong> <strong>in</strong>krementiert Zeiger danach */<br />
Zu Po<strong>in</strong>ter können Integer-Werte ad<strong>die</strong>rt oder subtrahiert werden. Dabei wird der Zeiger um <strong>die</strong><br />
entsprechende Anzahl von Variablen vor- oder zurückgestellt.<br />
Was wird <strong>in</strong> <strong>die</strong>sem Beispiel ausgegeben?<br />
char Text[] = "0H1a2l3l4o5";<br />
char *Ptr = &(Text[1]);<br />
<strong>in</strong>t Offset = 2;<br />
putchar(*Ptr);<br />
Ptr += 2;<br />
putchar(*Ptr);<br />
Ptr += Offset;<br />
putchar(*Ptr);<br />
Ptr += 2;<br />
putchar(*Ptr);<br />
Ptr += 2;<br />
putchar(*Ptr);<br />
Po<strong>in</strong>terarithmetik ist auch möglich, ohne den Po<strong>in</strong>ter zu verändern:<br />
char Text[] = "Hallo Welt";<br />
char *Ptr = &(Text[4]); /* Zeiger zeigt auf 'o' */<br />
<strong>in</strong>t Offset = 4<br />
putchar( *(Ptr + 2) ); /* gibt 'W' aus, Zeiger zeigt weiterh<strong>in</strong> auf 'o' */<br />
putchar( *(Ptr - 3) ); /* gibt 'a' aus, Zeiger zeigt weiterh<strong>in</strong> auf 'o' */<br />
putchar( *(Ptr + Offset ) ); /* gibt 'l' aus, Zeiger zeigt weiterh<strong>in</strong> auf 'o' */<br />
putchar( *Ptr ); /* gibt 'o' aus, Zeiger zeigt weiterh<strong>in</strong> auf 'o' */<br />
Die Differenz zwischen zwei Po<strong>in</strong>ter gleichen Typs, <strong>die</strong> auf Elemente <strong>in</strong>nerhalb des gleichen Arrays<br />
zeigen ergibt <strong>die</strong> Anzahl von Elementen zwischen den beiden Zeigern. (Dass beide Zeiger dabei <strong>in</strong><br />
dasselbe Array zeigen ist dazu Voraussetzung, ansonsten macht das Ergebnis ke<strong>in</strong>en grossen S<strong>in</strong>n).<br />
Es ist nicht möglich, Po<strong>in</strong>ter verschiedenen Typs vone<strong>in</strong>ander zu subtrahieren.<br />
Gedruckt am 11.09.2008 13:04:00 Letzte Änderung am: 11. September 2008 Version 2.4, I. Oesch 59/147