Pointer: Auf String iterieren
-
Hallo alle zusammen,
ich lese gerade das Buch "C++ the Programming Language - 4th Edition". Eine Schreibweise bei den Pointern auf S.197 mag mir nicht einleuchten.
Wenn ich mir einzelne Buchstaben aus einem String ausgeben lassen möchte, hätte ich das mit bislang so gemacht:
char test[] = "test"; char *p = test; while (*p) { std::cout << *p << '\n'; p++; }In dem Buch gibt es jetzt folgende Schreibweise als Funktion:
void fp(char* p) { while(*p) cout << ++*p; }Wenn ich die übernehme und mein Programm entsprechend umschreibe:
void fp(char* p) { while(*p) std::cout << ++*p; } int main() { char test[] = "test"; fp(test); }kriege ich die Ausgabe:
uvwxyz{|}~������������������������������������������������������������������������������������������������������������������������������Kann mir jemand erklären woran das liegt? Ich sehe den Fehler irgendwie nicht.
Lg

-
Das Problem von Erstauflagen...
-
Erstmal Danke für die Antwort !
Ist das tatsächlich ein Fehler im Buch?
-
Erstmal 10 Meter nacht rechts scrollen, um antworten zu können.

Siehe: http://en.cppreference.com/w/cpp/language/operator_precedence
-
out schrieb:
Erstmal 10 Meter nacht rechts scrollen, um antworten zu können.

Siehe: http://en.cppreference.com/w/cpp/language/operator_precedence^^
entschuldige - aber was soll ich da jetzt genau sehen ?
-
Jehcx schrieb:
out schrieb:
Erstmal 10 Meter nacht rechts scrollen, um antworten zu können.

Siehe: http://en.cppreference.com/w/cpp/language/operator_precedence^^
entschuldige - aber was soll ich da jetzt genau sehen ?
Prefix increment and decrement
Priorität = 3
Indirection (dereference)
Priorität = 3
Beide haben dieselbe Priorität, das ist doof. Nun muss die Assoziativität aushelfen.
Right-to-leftFazit: Der Zeiger wird dereferenziert, und dann wird das Objekt hinter dem Zeiger inkrementiert.
-
Eigentlich sollte das wohl *p++ heißen.
-
Jehcx schrieb:
Erstmal Danke für die Antwort !
Ist das tatsächlich ein Fehler im Buch?
Auch die dritte Edition hatte eine sehr lange Errata-Liste, eine Menge der Fehler waren dabei im Code. Es ist sehr wahrscheinlich, dass sich auch in der 4ten Edition viele kleine Fehler eingeschlichen haben.
-
Ach klar - ok. Jetzt hab ich es auch gerallt. Danke
!