2 Stimmen

Ich verstehe diese Syntax nicht

Warum steht bei dieser Schleife ein Doppelpunkt am Ende?

for(s = string; *s == ' '; s++)
    ;

danke

Bearbeiten * so ist es möglich, dieses Verfahren umzukehren, so dass es am Ende einer Zeichenfolge beginnt und prüft für ein Leerzeichen und sinkt, bis es ein Zeichenachter findet?

6voto

Es ist eine leere Anweisung, was in C ein No-op ist. Es ist, als ob Sie gesagt hätten:

for(s = string; *s == ' '; s++)
{
    // do nothing
}

Sie verwenden dies, wenn alles in der for( ... ) Konstrukt selbst - die C-Grammatik verlangt, dass es eine kontrollierte Anweisung gibt, aber es gibt nichts, was sie tun könnte.

3voto

Marius Punkte 55729

Das Semikolon bedeutet, dass innerhalb der Schleife nichts getan wird. In Ihrem Code wird die Schleife so lange durchlaufen, bis das Zeichen in der Zeichenkette kein Leerzeichen ist. Das heißt, nach dieser Zeile zeigt s auf das erste Zeichen in der Zeichenfolge, das kein Leerzeichen ist.

3voto

user231967 Punkte 1905

Das Semikolon bildet eine leere Anweisung in der Schleife. Diese Schleife sucht nach dem ersten nicht-leeren char in string .

1voto

den bardadym Punkte 2649

Weil in C (und anderen) für Grammatik ist: for (init; condition; step) Körper

Wobei body ein Closure sein kann (ein Codeblock in {}), aber body kann auch ein leeres mit sein;

1voto

Martin Wickman Punkte 19017

Ich möchte darauf hinweisen, dass die Schleife auch so geschrieben werden könnte, um deutlicher zu machen, was vor sich geht, und die Lesbarkeit zu erhöhen:

 for(s = string; *s == ' ';)
     s++;

Oder mit einer while-Schleife:

 s = string;
 while(*s == ' ')
     s++;

Aber ich denke, der erste Ansatz mit dem leeren Körper ist "c-idiomatischer" (und schwieriger zu lesen).

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X