Forum: Mikrocontroller und Digitale Elektronik Pointer - direkte Adresszuweisung?


von S. L. (lonci)


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        */

von Falk B. (falk)


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?

von Lukas K. (carrotindustries)


Lesenswert?

S. Lonci schrieb:
> Kann mir da bitte wer den Grund der Konvertierung erklären?

Damit der Compiler glücklich wird, denn
>warning: initialization makes pointer from integer without a cast
>  int *ptr = 0x0150;

Wenn man die Zahl wie im Beispiel als pointer auf int castet, ist der 
Compiler glücklich.

von Quarz (Gast)


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.

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.