Derefezierung?
-
Hi Leute!
Ich hab in meinem Buch was über die Dereferenzierung stehen. Diese sieht ja so aus: *a.
In meinem Buch dazu steht jetzt folgendes: Der Dereferenzierungsoperator ist ein Inhaltsoperator. Der nachfolgende (unär) Operand muss vom Typ Zeiger sein. Und jetzt? Was soll ich damit? Jetzt weiß ich über den Dereferenzierungsoperator nicht mehr als vorher... Könnt ihr mich ein bisschen drüber aufklären?
-
Wenn du einen Pointer hast, so enthält der Pointer die Speicheradresse zum gespeicherten effektiven Wert. Über den Dereferenzierungsoperator erhälst du den Wert (z.B. vom Typ int, wenn der Pointer auf ein int zeigt), der an dieser Adresse gespeichert ist.
Wenn du also einen Pointer a zu einem Typ int hast, so kannst du über den *-Operator z.B. den Wert verändern, auf den der Pointer zeigt mit
*a = 4
*a = 3Und du kannst den Wert mit *a ausgeben
(Ich hoffe, das verwiirt dich jetzt nicht noch mehr ^^)
*Edit
In der Variable a ist ja nur die Adresse enthalten.*Edit 2
Ich sehe gerade, dass das hier ja der C-Bereich ist. Hoffe ich hab keinen Mist verzapft ^^
-
Dann lies weiter oder nimm ein anderes Buch.
-
@icarus2
Das passt schon, das ist C.int *p,i=0; p = &i; // p zeigt a jetzt auf i *p = 5; // Der Stelle auf die p zeigt, wird 5 zugewiesen printf("%d, %d\n",*p,i);
Du kannst das so sehen das *p wie ein int ist.
Gebraucht wird das in Funktionen die Werte nicht als Funktionswert (also mit return) zurückgeben. Z.B. bei scanf
-
Ich hab mir gerade folgendes Programm geschrieben:
#include<stdio.h> int main() { printf("Adresse von main = %p\n", main); return 0; }
Diese Programm gibt mir die Adresse des "eigentlichen" Programms als der main-Funktion (darf man das sagen?) aus. Ich hab das gleiche Programm von zwei unterschiedlichen IDEs heraus gestartet wobei mir aufgefallen ist, dass das ein und dasselbe Programm zwei unterschiedliche Adresse für ein und das selbe Programm ausspuckt.
Meine Antwort: Das kommt davon, dass jeder IDE seinen eigenen Speicherbereich im Hauptspeicher nutzt und so auch das "eigentlich" gleiche Programm, also main, unterschiedliche Adressen nutzt. Stimmt das so?
-
Wenn du es von zwei unterschiedlichen IDE (also Compilern) gestartet hast dann ist es nur das gleiche Programm, nicht das selbe.
Vor main muss der Compiler ja noch einige Dinge vorbereiten, und das kann bei den Compilern schon mal unterschiedlich sein.
-
DirkB schrieb:
int *p,i=0;
Vorsicht, man sollte hier keine missverständlichen Deklarationen posten:
int *p; int i = 0;