Verständnisproblem mit Zeigern
-
Abend,
ich schlage mich zur Zeit mit Zeigern in C++ rum, aber komme irgendwie nicht weiter. Zur Verdeutlichung habe ich mir mal selber ein kleines Beispiel programmiert, wo einem Zeiger eine Adresse einer Variable zugewisen wird. Soweit so gut - es funktioniert.
Aber ich verstehe nicht, wenn ich bei einem Dereferenzierungsoperator(*) die Adresse ausgeben lasse warum diese anders als der Zeiger selbst ist. Warum ist das so?#include <cstdlib> #include <iostream> using namespace std; int main(int argc, char *argv[]) { int i; int *z; i = 10; cout << "i = " << i << endl; // Ausgabe des Wertes (i) cout << "&i = " << &i << endl; // Ausgabe der Addresse (i) z = &i; // Der Variable z die Adrsse der Variable i zuweisen cout << "z = " << z << endl; // Ausgabe von z // Hier diese Zeile cout << "&z = " << &z << endl; // Ausgabe der Audresse der Variable z // Zum vergleich die Ausgabe beider Adressen(i und z) cout << endl << endl << endl; // Beide Adressen sind gleich! cout << &i << endl; cout << z << endl; system("PAUSE"); return EXIT_SUCCESS; }Ich hoffe ihr versteht was ich meine.

Dummkopf

-
Dummkopf schrieb:
Ich hoffe ihr versteht was ich meine.

Nicht wirklich. Zum einen sagst du, die Adressen seien gleich, zum anderen fragst du, weshalb sich die Adresse vom Zeiger unterscheidet.
Es ist so: Ein Zeiger ist ein Datentyp, der eine Adresse (ein Integer im Hex-Format) speichert. Diese Adresse kann 0 sein (was den Zeiger als ungültig ausweist) oder die eines bestimmten Objektes. In letzterem Fall sagt man, der Zeiger zeige/verweise auf das Objekt.
Bei deinem Beispiel müssen der Zeiger
zund die Adresse&ija gleich sein, weil du sie einander zuweist.
-
Bedeutet das also, wenn der Datentyp, hier int, 4 Bytes groß ist, dass dementsprechend die Differenz des Zeigers zwischen
cout << z << endl;und
cout << &z << endl;auch 4 Bytes groß ist?
Hab ich das so richitig verstanden?
-
Bitte drücke dich mal verständlich aus.
Was meinst du mit "Differenz des Zeigers zwischen zwei Anweisungen"?
-
Der Datentyp Integer ist 4 Byte groß. Wenn ich nun folgendes folgendes auf der Konsole ausgebe:
cout << z << endl; cout << &z << endl;erscheint bei mir:
z = 0x22ff74
&z = 0x22ff70Entspricht nun die Differenzen zwischen der 1. und der 2. Ausgabe dem Integer(4 Bytes) ?
Besser ausgedrückt?
-
Ja, besser ausgedrückt.

Nein, das hat nichts mit dem Integer selbst zu tun, sondern mit der Adresslänge im Arbeitsspeicher. Unter 32-Bit-Systemen ist eine Adresse 4 Byte lang, also "zufälligerweise" wie
int. Zeiger brauchen also 4 Byte, um ihre Adresse zu speichern.Mit
&zgreifst du aber auf die Adresse des Zeigerszzu, hast also einen Zeiger auf einen Zeiger aufint.
-
Danke dir! Jetzt hab ich das verstanden. Vielen Dank

Dummkopf
-
Bitte. Ich empfehle dir, zusätzlich noch den Artikel über Zeiger nachzulesen, um dich noch besser einzuarbeiten.

-
Cool! Vielen vielen Dank nochmals!

Dummkopf