Verständisproblem Cast Ausdruck

Gast #4438244
Lesenswert?
• ▲
▼
Hallo
Ich habe gerade ein Problem folgende Zeilen Code zu verstehen. Leider 
habe ich noch nicht viel Erfahrung mit C und konnte bisher nichts 
darüber finden, vielleicht suche ich aber auch mit den falschen 
Begriffen.

#define StartAdresse ((uint32_t)0xD0000000)

void Funktion1(uint32_t adr, uint8_t wert)
{
  *(uint8_t*) (StartAdresse  + adr) = wert;
}

Um welches Konstrukt handelt es sich bei " *(uint8_t*) "?
Ist das eine Cast Operation? Kombiniert mit einem Pointer?
Ich hoffe ihr könnt mir etwas auf die Sprünge helfen :(

LG Frank
Gast #4438252
Lesenswert?
• ▲
▼
Karl M. schrieb:
> Um einen uint8 Zeiger auf Daten und um dessen Zugriff
> (Wertzuweisung)
> auf das Byte an der übergebene Adresse+Basisadresse.

Satzzeichen helfen manchmal... Aber er hat schon recht.

Du willst an die Addresse
1
StartAdresse  + adr

den Wert
1
wert

schreiben. Dazu musst du erst die Angegebene Addresse(die als Zahl 
angegeben ist) als Addresse casten
1
(uint8_t*) (StartAdresse  + adr)
und dann dereferenzieren, sodass du an diese Addresse den Wert schreibst
1
*(uint8_t*) (StartAdresse  + adr) = wert;
Gast #4438279
Lesenswert?
• ▲
▼
Ergänzung:
Wie immer in C muss man solche Ausdrücke häppchenweise von rechts nach 
links lesen.


           (StartAdresse  + adr)  nur eine Zahl.

 (uint8_t*)(StartAdresse  + adr)  die Zahl als Pointer auf ein
                                  uint8_t interpretieren.

*(uint8_t*)(StartAdresse  + adr)  dereferenzieren, also der Wert,
                                  auf den der Pointer zeigt.
Gast #4438328
Lesenswert?
• ▲
▼
Danke für eure Antworten, leider ist mir das ganze noch nicht so ganz 
klar.

Müsste ich dann nicht auch folgendes schreiben können.
1
 
2
#define StartAdresse ((__int32)0xD0000000)
3

4
__int8 x = 0;
5
  
6
x = (__int8*)StartAdresse;  ???
7

8
oder 
9

10
x = &((__int8*)StartAdresse); ???

Und so wieder in x den Wert 0xD0000000 stehen haben?

Antwort schreiben

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.

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.