mikrocontroller.net

Forum: Compiler & IDEs Zeiger-Artikel im Wiki


Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Magnus Müller (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Μαtthias W. (matthias) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Christoph __ (chris)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.