Forum: PC-Programmierung C: char-Pointer auf nächste Adresse zeigen lassen


von George (Gast)


Lesenswert?

Guten Abend allerseits!

Folgende Frage:
1
// ... 
2
char *s; 
3
// ... Inhalt von *s durchlaufen..
4
while(*s) {
5
   // Variante a: *s++; 
6
   // Variante b: s++; 
7
}


Ob ich nun Variante a oder b wähle, das Ergebnis ist dasselbe. 
Allerdings bezweifle ich, dass es um bloße Schreibvarianten handelt - 
oder doch? Vielleicht kann mich jemand darüber aufklären?

Ein großes Danke im Voraus.

von Karl H. (kbuchegg)


Lesenswert?

George schrieb:

> Folgende Frage:

Und was ist die Frage?

>
>
1
> // ...
2
> char *s;
3
> // ... Inhalt von *s durchlaufen..
4
> while(*s) {
5
>    // Variante a: *s++;
6
>    // Variante b: s++;
7
> }
8
>
>
>
> Ob ich nun Variante a oder b wähle, das Ergebnis ist dasselbe.

richtig.
Aber deine Variante a wird ja nicht einfach nur so dort stehen.
Der * dereferenziert den Pointer, liefert also den Character auf den der 
Pointer zeigt, ehe der Pointer dann erhöht wird. Und mit diesem 
Character wird ja in deiner Schleife irgendwas passieren.

Ob du schreibst
1
  while( *s ) {
2
    mach_was_mit( *s );
3
    s++;
4
  }

oder ob du schreibst
1
  while( *s ) {
2
    mach_was_mit( *s++ );
3
  }

kommt auf dasselbe heraus.

von George (Gast)


Lesenswert?

Danke! Entschuldige bitte, dass ich meine Frage nicht direkt gestellt 
hab ;).

Zu deiner Erläuterung:
D. h. konkret, dass ich, solange *s nicht weiterverarbeit wird, unnötig 
dereferenziere. Angenommen ich betreibe das in einem Programm en masse, 
würde sich das auf die Programmgröße und und seine Performance 
auswirken?

von Karl H. (kbuchegg)


Lesenswert?

George schrieb:
> Danke! Entschuldige bitte, dass ich meine Frage nicht direkt gestellt
> hab ;).
>
> Zu deiner Erläuterung:
> D. h. konkret, dass ich, solange *s nicht weiterverarbeit wird, unnötig
> dereferenziere.

Genau

> Angenommen ich betreibe das in einem Programm en masse,
> würde sich das auf die Programmgröße und und seine Performance
> auswirken?

Das ist gar nicht mal so sehr das Problem. Compiler sind ziemlich gut 
darin, Operationen aus einem Programm zu entfernen, die keinen Effekt 
haben.
Die eigentliche Frage lautet doch eher: Wozu willst du ständig 
dereferenzieren, wenn du dann sowieso nichts mit dem Wert machst? Man 
kann natürlich jedes Programm durch massenhaft unnötige Operationen 
maximal unübersichtlich machen.

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
Noch kein Account? Hier anmelden.