#include int main() { int a = 0, b = 0; int array[] = {0, 5, 10, 15, 20, 25}; int *p; printf("a, b : %d, %d\n\n", a, b); b = a++; /* Ist equivalent zu: b = a; a = a+1; */ printf("b = a++ => a, b : %d, %d\n\n", a, b); p = &a; /* &a ist die Speicheradresse von a. p hat als "Wert" die Speicheradresse von a. Oder anders ausgedrueckt, p "zeigt" auf a. */ printf("p = &a => *p, a : %d, %d\n\n", *p, a); (*p)++; /* durch *p wird auf a zugegriffen. Anschließend wird *p inkrementiert. Dadurch wird natuerlich auch a inkrementiert. Hierzu wird zuerst die Speicheradresse von a aus p gelesen. Anschließend wird über diese Adresse auf a zugegriffen. Nun kann der dort abgelegte Wert inkrementiert werden. */ printf("(*p)++ => *p, a : %d, %d\n\n", *p, a); p = array; /* array ist ein Zeiger auf die Speicheradresse des ersten Elements des Vektors mit dem Namen "array". p zeigt nun ebenfalls auf diese Adresse */ printf("p = array => *p, *array : %d, %d\n\n", *p, *array); p += 2; /* der Wert von p wird um 2 erhöht. Da es sich hierbei um eine Speicheradresse vom Typ int handelt, wird diese Adresse um 8 Bytes erhöht. p zeigt nun auf das 3te Element des Vektors. */ printf("p += 2 => *p : %d\n\n", *p); (*++p)++; /* ist equivalent zu: p = p+1; (*p) = (*p) + 1; Zuerst wird die Speicheradresse um 4 Byter (einen int) erhoeht. Anschließend wird der Wert dieser Speicherstelle (Das vierte Element des Vektors) um eins erhöht. */ printf("(*++p)++ => *p : %d\n\n", *p); /* array ist ein besonderer Zeiger. Bei der Definition von Vektoren ( Bsp.: int array[] = {0, 1} ) wird ein nicht veraenderbarer Zeiger erzeugt. Mit diesem kann ganz normal wie mit anderen Zeigern auch gerechnet werden. Es ist jedoch NICHT erlaubt die Speicheradresse dieses Vektor-Zeigers zu aendern! */ //array = p; //FEHLER! return 0; }