Hallo Experten,
wie haben jetzt grade Pointer gelernt. Nur ich habe das noch nicht so richtig verstanden.
Kann mir das jemand noch mal erklären oder Internet-Seiten sagen wo das gut erklärt wird?
Danke für eure Hilfe
Gruß
HariboGold
Hallo Experten,
wie haben jetzt grade Pointer gelernt. Nur ich habe das noch nicht so richtig verstanden.
Kann mir das jemand noch mal erklären oder Internet-Seiten sagen wo das gut erklärt wird?
Danke für eure Hilfe
Gruß
HariboGold
Hallo Experten,
wie haben jetzt grade Pointer gelernt. Nur ich habe das noch
nicht so richtig verstanden.
Kann mir das jemand noch mal erklären oder Internet-Seiten
sagen wo das gut erklärt wird?
Ein Pointer ist eine normale Variable, wie jede andere auch. Während ein „int“ ein Ganzzahl aufnehmen kann und „char“ ein einzlenes Zeichen, nimmt der Pointer die Adresse einer Speicherzelle auf. Du musst dir den Speicher deines Rechner als einen Vektor von Speicherzellen vorstellen, jede Zelle hat eine eigene Adresse. Diese Adresse kannst du in einen Pointer ablegen.
Der einfachste Pointer ist der void*, er zeigt auf eine Speicherzelle, weiss den Inhalt der Zelle nicht zu interpretieren. Der int* zeigt ebenfalls auf eine Speicherzelle, sagt aber der Inhalt ist als „int“ zu interpretieren. Beispiel:
Ausgangswert
int zahl=99;
Die Speicherzelle(n) der Variable tragen den Inhalt der Variablen Wert. Um an die Adresse der Variablen zu gelangen, verwendest du den Adress-operator & => &zahl liefert die Adresse der Variablen.
int* ptr;
Jetzt hat du einen Zeiger (engl. Pointer) angelegt. Der Zeiger ist noch nicht initialisiert, d.h. du hast ihm noch keinen Wert zugewiesen. Da du die Speicherzelle, auf die er verweist, nicht kennst, darfst du auch nicht darauf zugreifen. Einen Zeiger, der auf keine Zelle verweisen soll, initialisiert man daher mit 0.
int* ptr=0;
oder
ptr = 0;
Wenn du mit Pointer so verfährst, kannst du mit
if ( ptr == 0 )
prüfen, ob der Zeiger gültig ist.
Um den Pointer auf die Adresse der Variablen zahl verweisen zu lassen,
führst du folgende Anweisung aus:
ptr = & zahl;
Da ptr jetzt die Adresse der Variablen zahl kennt, kannst du nun auch mit diesem Pointer die Zahl ändern:
*ptr = 100;
(zahl enthält nach dieser Anweisung den Wert 100).
Der * vor dem Pointer kennzechnet, dass du auf die Zelle zugreifen willst, auf die der Pointer verweist. Würdest du den * weglassen, würdest du den Zeiger verändern.
Da Zeiger Adressen beinhalten, sind Zeiger gleich groß, d.h.
sizeof(int*) == sizeof(char*) == sizeof(double*) == sizeof( struct foo*)
Merke: Alle Zeige sind gleich groß
Der Typ des Pointers gibt lediglich den Typ der adressierten Speicherzelle an.
So, für’s Erste soll das mal reichen! Ich hoffe, das bringt etwas Licht ins Dunkel!
Gruß Markus
Hallo Experten,
wie haben jetzt grade Pointer gelernt. Nur ich habe das noch
nicht so richtig verstanden.
Kann mir das jemand noch mal erklären oder Internet-Seiten
sagen wo das gut erklärt wird?
Hallo!
schau doch mal ein paar zeilen weiter unten:
http://www.wer-weiss-was.de/cgi-bin/forum/showarticl…
Oder lad dir bei http://courses.iicm.edu/the_c_book/CD-ROM/ das C-Buch runter und lies dir das Kapitel über Pointer durch.
Viel Spass mit Pointern wünscht
Bettina