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

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