Pointer - direkte Adresszuweisung?

OP #3682576
Lesenswert?
• ▲
▼
Hallo,

ich habe eine Frage zur Konvertierung einer Pointeradresse und beziehe 
mich auf den Artikel http://www.mikrocontroller.net/articles/Zeiger

Dabei wird die Zahl 0x1100 zuerst in eine Adresse konvertiert!

Ist das notwendig?

Wenn ich mit
1
int *ptr = 0x0150;
die Adresse zuweise funktioniert das genau so!?

Kann mir da bitte wer den Grund der Konvertierung erklären?


------------------------------------------------------------------------
1
int *ptr = (int *) 0x1100;    /* reserviere Speicher für einen Zeiger des 
2
                               * Typs 'int', der auf die Adresse '0x1100'
3
                               * im RAM zeigt. (int *) konvertiert dabei
4
                               * die Integerzahl 0x1100 in eine Adresse.
5
                               */
6
 
7
int a;                        /* reserviere Speicher für einen Integerwert */
8
 
9
*ptr = 1234;                  /* schreibe den Wert '1234' an die Adresse,
10
                               * auf die 'ptr' zeigt
11
                               */
12
 
13
a = *ptr;                     /* kopiere den Wert, auf den 'ptr' zeigt,
14
                               * in 'a' 
15
                               */
16
 
17
ptr = &a;                     /* kopiere die Adresse von 'a' in ptr        */
#3682580
Lesenswert?
• ▲
▼
@ S. Lonci (lonci)

>Dabei wird die Zahl 0x1100 zuerst in eine Adresse konvertiert!

Was logisch ist, wenn man die Hintergründe von C kennt.

>Ist das notwendig?

Ja.

>Wenn ich mit
>int *ptr = 0x0150;
>die Adresse zuweise funktioniert das genau so!?

Nein, dein Compiler gibt mindestens ne Warnung aus, ggf. einen Fehler.

>Kann mir da bitte wer den Grund der Konvertierung erklären?

0x150 ist eine KONSTANTE (Integer), kein konstanter Pointer.

>int *ptr = (int *) 0x1100;

Das ist keine Konvertierung sondern ein Cast, der dem Compiler sagt, 
"Hey du, das IST ein Pointer auf die konstante Adresse 0x1100".

Wo ist das Problem? Die paar Zeichen mehr eintippen?
Gast #3682800
Lesenswert?
• ▲
▼
Vor allem bringst du mit dem Cast zum Ausdruck, dass du an dieser Stelle 
etwas explizit tust und das Ganze gewollt ist. Zusammen mit einem kurzen 
Kommentar verbessert das die Lesbarkeit und zeigt, dass du weißt was es 
mit Pointern auf sich hat.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 12 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.