12
votes

pour la boucle d'initialisation manquante

J'ai vu xxx

et xxx

pourquoi est-il vide comme ça. Merci.

c

0 commentaires

6 Réponses :


1
votes

Cela signifie faire pour toujours

pour (condition initiale; incrément; condition finale); Vous pouvez omettre l'un de ces

voir http://fr.wikipedia.org/wiki/for_loop

Les trois expressions de contrôle, séparés par des points-virgules ici, viennent de de gauche à droite de l'initialiseur expression, l'expression de test de boucle, et l'expression de comptage. Le initialisateur est évalué exactement une fois à droite au début de la boucle. Le L'expression de test de boucle est évaluée à le début de chaque itération à travers la boucle et détermine quand la boucle devrait sortir. Finalement, le compter l'expression est évalué à la fin de chaque itération de la boucle - même Si Continuer est appelé - et est généralement responsable de la modification de la boucle variable.

Dans la plupart des langues qui fournissent cette type de boucle, chacun des trois Les expressions de la boucle de contrôle sont facultatives. Quand omis l'expression de test de boucle est pris pour toujours être vrai, alors que le Expressions d'initialisateur et de comptage sont traités comme no-ops lorsqu'ils sont omis. Les points-virgules de la syntaxe sont suffisant pour indiquer l'omission de une des expressions.


0 commentaires

5
votes

pour (;;) est une boucle infinie. C'est effectivement la même chose que tandis que (vrai) .

La raison pour laquelle cela fonctionne est parce que lorsque l'état du milieu dans un pour boucle est vide, il est interprété comme toujours vrai.

pour (; * s! = '\ 0'; s ++) est utilisé pour lire les chaînes de caractères. Cette approche fonctionne car chaque chaîne C se termine par un caractère null ( \ 0 ).


0 commentaires

2
votes

Les pièces blanches ne font essentiellement rien. Donc, pour (;;) crée une boucle infinie qui ne fait rien du tout et ne quitte jamais car il n'y a pas d'état dans la boucle. Votre deuxième exemple: xxx

est juste une boucle normale sans aucune expression d'initialisation. Cela repose sur le fait que s a déjà une valeur initiale et juste des boucles jusqu'à atteindre la fin de la chaîne.


0 commentaires

28
votes

Le pour instruction fonctionne comme:

pour (initialisation; condition de test; mise à jour)

et tout ou partie de ces trois peuvent être omis (blanc gauche). Donc:

  • pour (;;) est une boucle infinie 1 équivalent à tandis que (vrai) car il n'y a pas de condition de test. En fait, pour (int i = 0 ;; i ++) serait également une boucle infinie 1 .

  • pour (; * s! = '\ 0'; s ++) est une boucle sans initialisation. s pointera au début de (probablement) une chaîne et est incrémenté jusqu'à ce qu'il atteigne le caractère null '\ 0' indiquant la fin de la chaîne. Cela signifie essentiellement une boucle à travers tous les caractères de la chaîne S

    1 La boucle sera toujours interrompue s'il ya une instruction break dans le corps de la boucle ou un appel à Quitter () , etc. ...


2 commentaires

\ 0 est le caractère nul . nul et null est différent.


@Prason Certaines personnes (comme moi-même) l'appelent juste le Null Caractère



7
votes

Il est "vide comme ça" parce que l'auteur du code l'a laissé vide. L'auteur ne voulait pas / besoin de faire quoi que ce soit dans la section correspondante de la déclaration pour , il a donc été laissé vide.

pour (;;) est une instruction qui itière indéfiniment (sauf si elle n'est interrompue du corps à cycle intérieur).

pour (; * s! = '\ 0'; s ++) est une instruction qui n'a pas besoin d'une section d'initialisation, car tout le nécessaire (comme la valeur initiale de S ) a déjà été initialisé avant que pour instruction.


0 commentaires

2
votes

tandis que (1) et tandis que (vrai) sont identiques que pour (;;)


0 commentaires