Verständnis Pointer



  • Hallo, ich habe gerade irgendwie ein kleines Verständnisproblem.

    Beispiel1:

    char test = a;
    

    Das ist klar test enthält a.

    Beispiel2:

    char *test = a;
    

    soweit auch klar test ist der Pointer zu dem wert a

    Beispiel3:

    const char test = a;
    

    Das ist auch klar, bedeutet das der Wert von test nicht änderbar ist.

    So aber jetzt mein Problem:
    Beispiel3:

    const char *test = a;
    

    Was bedeutet das? Was ist konstant und was ist änderbar? Kann ich den wert von test ändern oder bedeutet es das ich den type (char) nicht ändern kann?

    thx for help

    so long jd



  • jd schrieb:

    So aber jetzt mein Problem:
    Beispiel3:

    const char *test = a;
    

    Was bedeutet das? Was ist konstant und was ist änderbar? Kann ich den wert von test ändern oder bedeutet es das ich den type (char) nicht ändern kann?

    Letzteres ist richtig. const bezieht sich immer auf das was links (!) von const steht, es sei denn, da steht nichts, dann bezieht sich const auf das was rechts steht und das wäre in diesem Fall 'char' (nicht char*).

    Soll die Variable test const - also der Pointer auf das char - const sein, so muss man:

    char* const test = a;
    

    schreiben. Nun lässt sich zwar test nicht ändern, aber das wo test hinzeigt. Bei

    const char* const test = a;
    

    oder gleichbedeutend mit

    char const * const test = a;
    

    ist beides konstant.

    Gruß
    Werner



  • Werner Salomon schrieb:

    jd schrieb:

    So aber jetzt mein Problem:
    Beispiel3:

    const char *test = a;
    

    Was bedeutet das? Was ist konstant und was ist änderbar? Kann ich den wert von test ändern oder bedeutet es das ich den type (char) nicht ändern kann?

    Letzteres ist richtig. const bezieht sich immer auf das was links (!) von const steht, es sei denn, da steht nichts, dann bezieht sich const auf das was rechts steht und das wäre in diesem Fall 'char' (nicht char*).

    Soll die Variable test const - also der Pointer auf das char - const sein, so muss man:

    char* const test = a;
    

    schreiben. Nun lässt sich zwar test nicht ändern, aber das wo test hinzeigt. Bei

    const char* const test = a;
    

    oder gleichbedeutend mit

    char const * const test = a;
    

    ist beides konstant.

    Gruß
    Werner

    das habe ich auch noch nicht gewusst 😮 . danke 👍 jetzt weiß ich, warum bei mir const häufig der quell allen übels ist 😃



  • sothis_ schrieb:

    jetzt weiß ich, warum bei mir const häuig der quell allen übels ist 😃

    Geht mir nicht anders.

    Ok habe das jetzt soweit verschaden bis auf eine sache:

    const char *test = a;
    

    Beudet das char konstant ist, soweit klar nur kann mir das jemand erklären? char ist konstant, das bringt mir was? ich meine bedeutet das, das ich nicht casten kann?, weil test kann ich variabel ändern, kann ja jetzt test = b machen, verstehe also nicht was const char *test bedeutet. Selbst wenn ich

    char *test = a;
    

    habe kann ich nicht schreiben:

    test = 3;
    

    Das gibt ein error, also was bringt

    const char *test;
    

    thx jd



  • Du verwechselst hier wohl was. Wenn Du einen Zeiger test hast, führt "test = 3" deshalb zu einem Fehler, weil 3 kein Zeiger ist. Mit Konstanten hat das noch garnichts zu tun.

    So, jetzt hast Du einen Zeiger auf konstante chars (const char * test). Wie Du schon festgestellt hast, kannst Du test ändern, weil der Zeiger ja nicht konstant ist. Die Zeichen, auf die der Zeiger zeigt, sind es aber. Deshalb ist folgendes verboten:

    *test = 'a'; // oder
    test[0] = 'a'; // oder auch
    test[4711] = 'a';
    


  • Von rechts nach links lesen, und * durch "ein Zeiger auf" ersetzen.

    const char* a; // a ist ein Zeiger auf ein konstantes char
    char* const a; // a ist ein konstanter Zeiger auf ein char



  • Und da hat es klick gemacht 🙂

    Danke nun habe ich es verstanden

    so long


Anmelden zum Antworten