Ein Zeiger ist ein Datentyp, der eine Adresse speichert.

Beispiele

// Null-Pointer beim Initialisieren (good practice)
int *zeiger = NULL;
int var = 5;
// zeiger ist ein pointer, var ist ein int
// äquivalent zu int *zeiger; int var = 5;
 
zeiger = &var;
 
printf("%d\n", *zeiger); // 5
 
*zeiger = 13;
 
printf("%d\n", *zeiger); // 13
int variable = 0x29;  
int *pointer;  
  
pointer = &variable;  
  
variable;  // 29 (Wert der Variable)
&variable; // 0000007b609ff86c (Speicherort der Variable)
pointer;   // 0000007b609ff86c (Wert des Pointers)
&pointer;  // 0000007b609ff860 (Speicherort des Pointers)
*pointer;  // 29 (Inhalt des Speicherortes, worauf der Pointer zeigt)

Zeiger verändern

Bei zeiger++ oder zeiger-- springt der zeiger immer um die Größe des Zeiger-Datentyps weiter.

int var;
 
int *zeiger = &var;
 
printf("%p\n", zeiger); // z.B. 0x0010
 
zeiger++;
 
printf("%p\n", zeiger); // dann 0x001d (0x0010 + 4 (größe von int))

Evaulation

*zeiger++;
 
// ++ wird zuerst ausgeführt, daher ist das oben äquivalent zu:
*(zeiger++);
 
// Gewollt war wahrscheinlich:
(*zeiger)++;