Objekt im Anschluß an das Objekt, auf das ptr gerade zeigt.
Es wird also nicht der Wert N zu ptr direkt addiert,
sondern N wird vorher mit der Typlänge des Typs, auf den ptr
zeigt, multipliziert. Dieser Typ wird aus der Deklaration von ptr bestimmt.
Beispiel-Unterprogramm: Länge der Zeichenkette s
int strlen(char *s)
{
char *p = s; /* Pointer zeigt auf das erste Element */
while (*p != '\0') /* Solange der String nicht zuende ist */
p++; /* Pointer incrementieren */
return (p-s); /* Laenge = aktueller Wert - Anfangswert */
}
Beispiel: 2 Versionen von strcmp: Vergleich zweier Strings
s und t. Die Funktion liefert als Ergebnis:
Ergebnis < 0 wenn s kleiner t ist,
Ergebnis = 0 wenn beide Strings identisch sind,
Ergebnis > 0 wenn s > t ist
/* Version mit Arrays */
int strcmp(char s[],char t[])
{
int i;
i = 0;
while (s[i] == t[i])
if (s[i++] == '\0')
return (0);
return (s[i] - t[i]);
}
/* Version mit Pointern */
int strcmp(char *s,char *t)
{
for ( ; *s == *t; s++,t++)
if (*s == '\0')
return (0);
return (*s - *t);
}
Folgende Operationen sind möglich, sollten jedoch mit Vorsicht
verwendet werden.
pc = (int*)10 . . . . . Zuweisen der Adresse 10 an die Zeigervariable pc
x = *(int*)10 . . . . . Zuweisen des Inhalts der Adresse 10 an die Variable x
Mit diesen Operationen kann man auf beliebige Speicherplätze zugreifen.
Nützlich sind solche Befehle bei systemnaher Programmierung, z. B.
bei der systemnahen Programmierung von Mikrocontollern.
|