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?
--> 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
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?
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
> 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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.