Zeiger (Pointer)
Was kennzeichnet eine Variable ? VarName, VarTyp, VarWert, VarAdresse !
Beispiel: (int ia=5)
VarName |
ia |
VarTyp |
Integer |
VarWert |
5 |
VarAdresse |
0x0012FF78 |
Die Variablenadresse läßt sich auslesen durch Voranstellung eines kaufmännischen-Und Zeichens &. Die Adresse kann in eine Variable speziellen Datentypes ausgelesen werden, den Zeiger. Kennzeichnen Sie Zeiger durch ein vorangestelltes p.
Beispiel: pa=&ia (Der Zeiger wurde bereits deklariert)
Dies ist ein Zeiger der auf den Wert der Variablen zeigt, dessen Adresse ihm zugewiesen wurde.
VarName |
ia |
Pa |
VarTyp |
Integer |
Zeiger auf Integer |
VarWert |
5 |
0x0012FF7C |
VarAdresse |
0x0012FF7C |
0x0012FF78 |
Zeiger können verwendet werden um auf direkte Weise (über ihre Adresse) den Wert einer Variablen zu ändern. Mit einem vorangestellten Stern (*) kann auf die Adresse zugegriffen werden. Beispiel:
*pa=7;
VarName |
ia |
Pa |
VarTyp |
Integer |
Zeiger auf Integer |
VarWert |
7 |
0x0012FF7C |
VarAdresse |
0x0012FF7C |
0x0012FF78 |
Dies ändert nichts an dem Zeiger selber sondern nur die Adresse auf die der Zeiger zeigt.
Wie wird ein Zeiger deklariert ?
Zeiger müssen bei ihrer Deklaration immer einem Datentyp zugewiesen werden. D.h. Ein Integer Zeiger kann nur auf eine Integer-Variable zeigen, ein Double-Zeiger nur auf eine Double-Variable etc.
int *pa; /* definiert einen Zeiger auf eine Integervariable */
double *pb /* definiert einen Zeiger auf eine Doublevariable */
Wozu brauchen wir das ?
Sie erhalten mit Zeigern ein mächtiges Mittel um Variablen die beispielsweise in der Main-Funktion verwendet werden, in Funktionen zu verändern.
Beispiel: scanf("%d"&ia);
#include <stdio.h>
void main(void)
{
char ca='a';
char cb='Q';
char *px;
printf("ca hat das Zeichen: %c\n", ca);
printf("und die Adresse: %p\n\n", &ca);
px=&ca;
printf("Der Zeiger pa (auf ca) hat den Wert: %p\n",px);
*px='z';
printf("Und jetzt hat ca das Zeichen: %c\n\n",ca);
px=&cb;
printf("cb hat das Zeichen %c",cb);
printf("Jetzt hat der Zeiger (diesmal auf cb) den Wert: %p\n",px);
printf("Und zeigt im Speicher auf das Zeichen : %c (is ja logisch)\n",*px);
]