Systemnahe Programmierung in Chome Systemnahe Programmierung in C: Zeigerarithmetik Prof. Dr. Uwe Schmidt FH Wedel

Zeigerarithmetik

weiter

weiter

Operationen auf Zeigern

Zeiger
sind getypt, besitzen einen Basistyp.
weiter
die Länge des Basistyps wird bei der Zeigerarithmetik zur Skalierung benötigt.
weiter
Indizierter Zugriff wird definiert durch Zeigerarithmetik und Dereferenzieren.
weiter
p[i] == *(p+i)
weiter
Zeiger mit gleichem Basistyp können subtrahiert werden zur Berechnung der Distanz zwischen zwei Speicherzellen.
weiter
&p[i] - &p[j] == i - j

(p + i) - (p + j) == i - j

weiter
Zeiger mit gleichem Basistyp können in Vergleichen verwendet werden.
weiter
p1 <= p2 == p1 - p2 <= 0
weiter
Nicht nur == und !=, sondern auch die Operatoren >, >=, < und <= sind für Zeiger erlaubt.
weiter
Zeiger mit unterschiedlichem Basistyp können konvertiert werden.
weiter
T1 * p1; ... (T2 *)p1 ...
weiter
Zeiger können in ganzzahlige Werte konvertiert werden und umgekehrt.
T1 * p1; ... (int)p1 ... (T1 *)23 ...
weiter
die header-Datei für vordefinierte systemabhängige Datentypen size_t und ptrdiff_t
weiter

weiter

Zeigerarithmetik
Beispiel: versuch.c

   1int ar[] = { 1, 3, 5, 7 };
   2
   3void
   4niceTry (void)
   5{
   6
   7  int *p1 = &ar[0];
   8  int *p2 = ar;
   9
  10  int j;
  11
  12  char *p3;
  13
  14  p2 = p1 + 3;
  15  j  = p2 - p1;
  16  j  = p1 - p2;
  17  p1 = p2 - 1;
  18
  19  p1 = p1 + 2;
  20  p3 = p1 - 1;
  21  j  = p1 - p3;
  22
  23  p1 = 0;
  24
  25  while (p1)
  26    ;
  27
  28  while (p1 != 0)
  29    ;
  30}
weiter

weiter

Übersetzen

cc -c -Wall versuch.c

weiter

Letzte Änderung: 11.01.2007
© Prof. Dr. Uwe Schmidt
Prof. Dr. Uwe Schmidt FH Wedel