Bei folgenden Testcode kann man Zeile a und b (s. unten) variieren und es funzt immernoch. Entweder ist "C" nicht konsequent oder ich sollte lieber die Zeiger ner Uhr betrachten - die versteh ich nämlich. #include <stdio.h> #include "iostream.h" void print_char(char c){ cout<<c; } void print_string(char *c){ while (*c != 0) { /* Variante 1 */ print_char(*c); //Zeile a *c++; //Zeile b } } int main(void){ print_string("Hallo"); return 0; } /* Varinte 2 print_char(*c++); //Zeile a //Zeile b Variante 3 print_char(*c); //Zeile a c++; //Zeile b */
Muß ich mir wohl besorgen. Aber *c++ == c++ ??? Liegt irgendwie nahe, daß *c++ den Inhalt inkrementiert und c++ den Pointer, oder nicht?
Nein, das wäre (*c)++. Bei *c++; ist der Stern einfach eine Null-Anweisung, da Du das Ergebnis der Dereferenzierung des Pointers nie benutzt. Der Compiler wird bei vernünftiger Optimierung daher den Pointer gar nicht erst dereferenzieren, sondern nur noch um ein Objekt erhöhen.
>< *c++ == c++ ?? Nein aber print_char(*c++); == print_char(*c); c++; >>daß *c++ den Inhalt inkrementiert Nein, *c++ und c++ erhöhen den Pointer auf c
Im Zweifel also zum Klammeraffen werden*lach* Danke für's auf die Sprünge helfen :-)
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.