Forum: Compiler & IDEs Zeiger-Artikel im Wiki


von Thomas (Gast)


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?

von Magnus Müller (Gast)


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

von Thomas (Gast)


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?

von Μαtthias W. (matthias) Benutzerseite


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

von Christoph _. (chris)


Lesenswert?

> Der gcc initialisiert ja Variablen standarmäßig mit 0.
Lokale Variablen selbstverständlich nicht. Das wäre unnötiger Aufwand,
der vom C-Standard nicht vorgesehen ist.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.