Verständisproblem Cast Ausdruck

Gast #4438244
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
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
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
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

Eine eigene Frage? Dieser Thread ist über 10 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.