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.