Zeiger
Zeiger, wichtigste Datenstruktur für effektive C-Programmierung. Enthält
nicht den eigentlich zu speichernden Wert, sondern die Speicheradresse, an der
der Wert gespeichert ist.
Zeiger sind typenbehaftet! Ein Zeiger auf eine int -Variable unterscheidet
sich von einem Zeiger auf eine char -Variable.
Die Länge des Datentyps Zeiger richtet sich nach der Größe des
adressierbaren Speicherbereichs und ist abhängig von der Architektur des
Computers, aber unabhängig vom Typ des Zeigers!
Dereferenzierung *x , bezeichnet den Inhalt der Speicherzelle, auf die
der Zeiger verweist. *x kann sowohl auf der linken wie auf der rechten
Seite einer Zuweisung stehen:
int x;
int* y;
*y = 5;
x = *y;
Nach der Deklaration gemäß int* x; ist der Zeiger x zunächst
undefiniert, enthält also irgendeinen zufälligen Wert.
Ein Beschreiben gemäß *x = 5 verändert unkontrolliert Speicherzellen,
die anderen Variablen oder - schlimmstenfalls - einem ausführbaren
Programm zugeordnet sind. Fehler oder Programmabsturz sind die Folge!
Adressen-Operator ,,&``, liefert einen Zeiger
des entsprechenden Typs auf eine Variable.
int* p1;
char* p2;
int i = 1;
char c = 2;
p1 = &i;
p2 = &c;
printf("i = %d, c = %d",*p1,*p2); /* liefert: "i = 1, c = 2" */
Bei zusammengesetzten Datentypen mit großem Speicherbedarf ist beispielsweise
das Umkopieren von Variablen mit Zeigern deutlich schneller als
Operationen mit normalen Variablen, bei denen stets der gesamte Speicherbereich
kopiert werden muß.