21.11.2013 Aufrufe

Eine Einführung in die Programmiersprache C und die Grundlagen ...

Eine Einführung in die Programmiersprache C und die Grundlagen ...

Eine Einführung in die Programmiersprache C und die Grundlagen ...

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

<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 10.09.2009 14:23:00 Letzte Änderung am: 10. September 2009 Version 2.4.1, I. Oesch 59/147

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!