mikrocontroller.net

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


Autor: George (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guten Abend allerseits!

Folgende Frage:
// ... 
char *s; 
// ... Inhalt von *s durchlaufen..
while(*s) {
   // Variante a: *s++; 
   // Variante b: s++; 
}


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.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
George schrieb:

> Folgende Frage:

Und was ist die Frage?

>
>
> // ...
> char *s;
> // ... Inhalt von *s durchlaufen..
> while(*s) {
>    // Variante a: *s++;
>    // Variante b: s++;
> }
> 
>
>
> 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
  while( *s ) {
    mach_was_mit( *s );
    s++;
  }

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

kommt auf dasselbe heraus.

Autor: George (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.