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

Gast #2092012
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.
#2092020
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.
Gast #2092030
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?
#2092090
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren