const zeiger in einer funktion



  • 🙂 sorry ich hab leider nichts verstanden 😕



  • hab das gerade nochmal getestet, denke es liegt daran, dass die variable char *str schreib geschützt ist aber nicht char *ptr.
    du kopierst die adresse von "str" in "ptr" dadurch verlierst du das const und den schreibschutz und kannst ohne probleme *ptr = '-'; zuweisen würdest du dies direkt auf "str" versuchen also *str = '-'; sollte der fehler kommen den ich vorher gepostet hab

    lg lolo



  • erklären kann ich mir das nur so, dass zwar die variable mit const schreibgeschützt ist, aber nicht der speicher auf den die variable zeigt 🙄

    lg lolo



  • ja ich verstehe was du meinst, die gleiche erklärung habe ich mir auch gemacht, aber der platzt wo ich dieses beispiel gefunden habe ist das buch c von a bis z und ich denke nicht dass man so ein beispiel macht wenn es nicht funktioniert, deswegen dachte ich das vlt irgendwo ein fehler versteckt ist.

    hier die seite wo das beispiel aufgeführt ist, ganz unten:
    http://openbook.galileocomputing.de/c_von_a_bis_z/012_c_zeiger_008.htm



  • Das const soll (angeblich) eine Hilfe für Compiler und Programmierer sein. const char * s oder gleichwertig char const * s ist ein nicht-konstanter Zeiger auf ein konstantes Zeichen. Das const kann man aber wieder wegbekommen, wenn man (wie du) einen Zeiger auf ein nicht-konstantes Zeichen verwendet, der auf das gleiche Ziel zeigt. Auch ein Gips hilft:

    char array[] = "abc";
    char const * s = array;
    ((char *)s)[0] = 'z';
    

    ciggy schrieb:

    hier die seite wo das beispiel aufgeführt ist, ganz unten:
    http://openbook.galileocomputing.de/c_von_a_bis_z/012_c_zeiger_008.htm

    Oje, lies mal hier weiter:
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-254601-and-postdays-is-0-and-postorder-is-asc-and-start-is-0.html

    Wird langsam was für die FAQ.
    🙂



  • oje oje und ich hab es schon so weit durchgelesen. und ich wollte eigentlich bis zu meiner klausur die in ca 1 woche ist das ding durchlesen und vorbereitet sein xD da hab ich mich wohl in die sch... gelesen.

    nochmal zum problem
    also wenn ich das richtig verstanden habe hat das const nur den ersten buchstaben im string als konstante definiert?
    in diesem fall könnte ich also nur das h nicht verändern, desewegen konnte man trotzdem das leerzeichen verändern?
    ne anscheinend doch nicht man kann es ändern.
    was ist denn jezt nicht veränderlich in diesem fall?



  • ciggy schrieb:

    was ist denn jezt nicht veränderlich in diesem fall?

    Unveränderlich ist immer das Zeichen, auf das der Zeiger gerade zeigt. Wenn man das const nachstellt, kann man alles von rechts nach links lesen:

    char const * p;
    // p ist ein Zeiger (*) auf ein konstantes (const) Zeichen (char)
    
    char * const p;
    // p ist ein konstanter Zeiger auf ein Zeichen
    
    char const * const p;
    // p ist ein konstanter Zeiger auf ein konstantes Zeichen
    

    Dann noch bedenken, dass const char das gleiche ist wie char const , und es kann nichts mehr schiefgehen.

    ciggy schrieb:

    und ich wollte eigentlich bis zu meiner klausur die in ca 1 woche ist das ding durchlesen und vorbereitet sein xD da hab ich mich wohl in die sch... gelesen.

    Am Ende der Openbook-Seite ist ein Feedback-Formular. Wenn dir danach ist, beschwer dich einfach bei dem guten Jürgen.

    ich schrieb:

    Unveränderlich ist immer das Zeichen, auf das der Zeiger gerade zeigt.

    Aber das const vererbt sich auch auf Zeiger, die davon mit Adressarithmetik abgeleitet werden, so wie p[2] , weil es das gleiche ist wie *(p + 2) .
    🙂

    Edit 1-n: Belletristik ist nichts für Anfänger



  • hmm, aber im gegebenen beispiel zeigt doch der überlieferte zeiger auf das h von hallo welt, dann müsste das h ja in diesem fall konstant sein da ja in der funktionsdeklaration im prinzip

    char const * p;
    // p ist ein Zeiger (*) auf ein konstantes (const) Zeichen (char)
    

    steht. Aber ich hab ausprobiert ob man das h in der funktion umändern kann, und es geht.



  • ciggy schrieb:

    Aber ich hab ausprobiert ob man das h in der funktion umändern kann, und es geht.

    Weil du es über die Zeiger-Variable ptr änderst, die kein const hat. Würdest du str verwenden, würde das nicht gehen, weil str ein const hat.

    Lies am besten hier weiter:
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-263979-and-start-is-6.html
    🙂



  • haha der wer gut mich auf den eigenen Beitrag zu verlinken 😃

    danke für die antworten 😉


Anmelden zum Antworten