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 hablg 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 gleichwertigchar 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.htmOje, 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.htmlWird 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 wiechar 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