2010-09-25 8 views
5

que he vistopara el bucle de inicialización falta

for(;;) 

y

for (; *s != '\0'; s++) 

¿Por qué es blanco así. Gracias.

+0

Para todas las respuestas actuales: Creo que realmente quiere saber lo que el blanco es para. –

Respuesta

17

La declaración for funciona como:

for (initialization; test-condition; update)

Y cualquiera o todos los tres se pueden omitir (izquierda en blanco). Por lo tanto:

  • for (;;) es un bucle infinito equivalente a while (true) porque no hay una condición de prueba. De hecho, for (int i=0; ;i++) también sería un bucle infinito .

  • for (; *s != '\0'; s++) es un bucle sin inicialización. s señalará el comienzo de (probablemente) una cadena y se incrementará hasta que alcance el carácter nulo '\0' que denota el final de la cadena. Esto significa esencialmente bucle a través de todos los caracteres de la cadena s

El bucle todavía será interrumpida si hay una declaración break en el cuerpo del bucle, o una llamada a exit(), etc ...

+1

'\ 0' es el caracter' NUL' .NUL' y 'NULL' son diferentes. –

+3

@Prasoon Algunas personas (como yo) simplemente lo llaman el [carácter nulo] (http://en.wikipedia.org/wiki/Null_character) – NullUserException

1

que significa hacer siempre

para (condición inicial; incremento; condición final); Puede omitir cualquiera de estos

Ver http://en.wikipedia.org/wiki/For_loop

Las tres expresiones de control, separados por punto y coma aquí, es de de izquierda a derecha la expresión de inicialización , la expresión de prueba de bucle, y la expresión de conteo . El inicializador se evalúa exactamente una vez justo al inicio del ciclo. La expresión de prueba de bucle se evalúa en al comienzo de cada iteración a través del bucle y determina cuándo debe salir el bucle . Finalmente, la expresión de conteo se evalúa en al final de cada iteración de bucle - incluso si se invoca continuar - y suele ser responsable de alterar la variable de bucle .

En la mayoría de los idiomas que proporcionan este tipo de bucle for, cada una de las tres expresiones de bucle de control es opcional. Cuando se omite, la expresión de prueba de bucle se considera siempre verdadera, mientras que el inicializador y las expresiones de conteo se consideran no operativas cuando se omiten. Los puntos y comas en la sintaxis son suficiente para indicar la omisión de una de las expresiones.

4

for(;;) es un bucle infinito. Es efectivamente exactamente lo mismo que while (true).

La razón por la que esto funciona es porque cuando la condición intermedia en un bucle for está vacía, se interpreta como siempre cierto.

for (; *s != '\0'; s++) se utiliza para leer cadenas carácter por carácter. Este enfoque funciona porque cada cadena C termina con un carácter nulo (\0).

2

Las partes que están en blanco esencialmente no hacen nada. Por lo tanto, for (;;) crea un ciclo infinito que no hace nada y nunca se cierra porque no hay ninguna condición en el ciclo. Su segundo ejemplo:

for (; *s != '\0'; s++) 

es simplemente un bucle normal sin ninguna expresión de inicialización. Esto se basa en el hecho de que s ya tiene un valor inicial y simplemente realiza un bucle hasta que llega al final de la cadena.

6

Es "en blanco así" porque el autor del código lo dejó en blanco. El autor no quería/necesitaba hacer nada en la sección correspondiente de la declaración for, por lo que se dejó en blanco.

for (;;) es una afirmación que itera indefinidamente (a menos que se interrumpa desde el interior del cuerpo del ciclo).

for (; *s != '\0'; s++) es una afirmación que no necesita una sección de inicialización, ya que todo lo necesario (como el valor inicial de s) ya se inicializó antes de esa declaración for.

1

while(1) y while(true) son los mismos que for(;;)

Cuestiones relacionadas