Wie caste ich richtig?
-
Hey hab folgendes Problem:
char B[1000];
uint32_t *W;
*W = B;void BLABLA(void){
W = B + 1;
}
Wärt ihr so freundlich und erklärt eure Antwort kurz, damit ich es in Zukunft verstehe?
Vielen Dank und liebe Grße
-
Marti schrieb:
Du hast keinen Zeiger auf B. Bereits in Zeile 3 deines Codes steckt ein schlimmer Fehler. W zeigt noch gar nicht auf gültigen Speicher, du versuchst aber, dort was hinzuschreiben. Du meintest wohl eher
W=B
.Wenn du noch nicht mit Zeigern umgehen kannst, ist es vermutlich am sinnvollsten, du schnappst dir ein Buch/Tutorial und gehst einfach mal die ersten paar Kapitel durch. Dann sollte dir so einiges klar werden.
-
Ganz sicher:
W = B + 4;
Und deiner Frage nach:W = ((uint32_t *)B) + 1;
Mit den Klammern gibt es keine Missverständnisse.
-
Ah stimmt, da hat sich ein kleiner fehler eingeschlichen - sry. (Danke für den Hinweis)
Korrektur:
char B[1000];
uint32_t *W;
W = B;void BLABLA(void){
W = B + 1;
}
Vielen Dank für die Hilfe, nur noch eine Frage, denn urspr. war ich schon ähnlich weit, aber warum die mit ? umschlossene Klammer?
W = ?(?(uint32_t *)B?)? + 1;
Hatte nämlich ursprünglich
W = (uint32_t *)B + 1;
das müsste doch auch gehen oder?
-
Casts sind nichts für Anfänger, das geht meistens schief.
Woher weißt du, dass du für deine Aufgabenstellung Casts benötigst?
Du benötigst keine Casts dafür und uint32_t ist auch bloß C99.char b[]="111122223", (*w)[4]=b; /* Zeiger auf 4 char */ putchar(**w++); /* Inkrement eines Zeigers auf 4 char erhöht die effektive Adresse um sizeof(4 char)==4 */ putchar(**w++); putchar(**w);
-
Marti schrieb:
... aber warum die mit ? umschlossene Klammer?
W = ?(?(uint32_t *)B?)? + 1;
DirkB schrieb:
Mit den Klammern gibt es keine Missverständnisse.
Du bist doch am rumrätseln.