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.


Anmelden zum Antworten