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
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.
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.
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
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).
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.