Zeiger-Artikel im Wiki

Gast #364993
Lesenswert?

Hallo,
gucke gerade im Wiki den Artikel für Zeiger durch, und da steht
folgendes:

int *ptr = (int *) 0x1100;

/* (int *) konvertiert dabei die Integerzahl 0x1100 in eine Adresse.*/

Mir ist nicht klar warum dieser Cast verwendet wird.
Die Deklaration und Definition geschieht hier ja in einer Zeile. An
welche Speicherstelle würde der Pointer denn Zeigen, bzw. wohin würde
dann die 0x1100 geschrieben wenn man den Cast wegließe?
Gast #364994
Lesenswert?

--> An welche Speicherstelle würde der Pointer denn Zeigen, bzw.
--> wohin würde dann die 0x1100 geschrieben wenn man den Cast
--> wegließe?

Der Compiler würde ohne den Cast (int *) vermutlich "nur" eine
Warnung ausgeben.

Ausserdem handelt es sich bei der 0x1100 nicht um einen Wert, der in
einer durch *ptr dereferenzierte Speicherstelle abgelegt wird, sondern
"(int *) 0x1100" ist die Adresse, welche in *ptr abgelegt wird.

Hiermit wird also dem POINTER "ptr" die ADRESSE 0x1100 zugewiesen.

Gruß,
Magnetus
Gast #364995
Lesenswert?

Der gcc initialisiert ja Variablen standarmäßig mit 0.
Also bei

int i;

besitzt i den Wert 0, auch wenn ich es nicht extra angebe (aber
sollte).
Demnach würde ich bei weglassen des Casts die 0x1100 an die
Speicherstelle 0 schreiben. Richtig?
Persönliche Seite #364996
Lesenswert?

Hi

Nein. Wenn du den cast wegläßt wandelst du bei der Initialisierung der
Variablen einen Integerwert in eine Adresse. Da das etwas ist was nicht
absolut üblich ist (da evtl. sizof(int) != sizof(* int)) wirft der
Compiler eine Warnung. Mit dem Cast signalisierst du dem Compiler
sozusagen: "Ich weiß was ich da tue. Du brauchst mich nicht zu
warnen".

Matthias

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren