Forum: Compiler & IDEs Verständnisproblem


von Peter M. (peter9999)


Lesenswert?

hallo,

kann mir hier jemand weiterhelfen:

(*((unsigned long*)&ntp_server_ip[0])) = 
get_eeprom_value(NTP_IP_EEPROM_STORE,NTP_IP);

?

Was geschieht hier auf der linken Seite der Zuweisung?

Danke
peter

von Sven H. (dsb_sven)


Lesenswert?

So wie das aussieht wird die Adresse des ersten Elements des Arrays 
"ntp_server_ip" auf einen Pointer auf unsigned long gecastet und dann 
dereferenziert um einen Wert zuweisen zu können.

von Karl H. (kbuchegg)


Lesenswert?

Wenn du sowas lesen willst, dann fang beim Variablennamen zu lesen an

 (*((unsigned long*)&ntp_server_ip[0])


Man nehme

   ntp_server_ip                   also das ganze Array

   ntp_server_ip[0]                davon das Element mit dem Index 0

   &ntp_server_ip[0]               von dem wiederum die Adresse

 (unsigned long*) &ntp_server_ip[0]   diese Adresse (ich schätze mal das
                                      Array wird vom Typ unsigned char
                                      sein. Damit war die Adresse bisher
                                      die Adresse eines Bytes), diese
                                      Adresse soll umgecastet werden
                                      auf einen Pointer zu unsigned long

  *((unsigned long*) &ntp_server_ip[0])  diese Adresse dereferenzieren.
                                      Da der komplette Ausdruck auf der
                                      linken Seite eines = steht, wird
                                      daher an dieser Adresse ein Wert
                                      abgelegt, nämlich der von der
                                      rechten Seite vom =
                                      Und da die Adresse (nach dem
                                      umcasten) ein Pointer zu unsigned
                                      long war, wird daher ein unsigned
                                      long geschrieben.

Nicht von der Komplexität abschrecken lassen! Beim Variablennamen zu 
lesen anfangen. Dort beginnt die Geschichte, die der komplette Ausdruck 
erzählt.

von Peter M. (peter9999)


Lesenswert?

Danke, jetzt wird mir das klar!

von Wolfgang Horn (Gast)


Lesenswert?

Hi, Karl Heinz, Beifall!

Beifall für Deine Mühe für eine verständliche und weiterführende 
Erklärung.

Dies war nicht der Einzige Deiner Beiträge, die ich so genossen habe.

Hebt sich wohltuend ab von den emotionalen 5-Wörter-Zwischenrufen, mit 
denen mancher andere meint, glänzen zu müssen.

Ciao
Wolfgang Horn

von Meisel (Gast)


Lesenswert?

Das heißt doch weiter, die Zuweisung schreibt auf die Elemente 0, 1, 2 
und 3 des Arrays, richtig? (Mal davon ausgegangen, dass long hier 4 Byte 
breit ist. Ich benutze so gut wie nie die nativen Datentypen).

von Klaus W. (mfgkw)


Lesenswert?

ja, falls es sich um ein Feld von Bytes handelt.
Wenn es ein Feld von 16-Bitwerten ist, dann halt die unteren 2 statt 4 
Elemente.

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.