El programa eventualmente se detiene, pero después de unas 22040 iteraciones del loop externo. Por lo tanto, para fines prácticos, puede considerarse como un loop infinito... Es claro que devuelve cero, ya que tuvo que salir del loop externo para poder terminar. A continuación se describe con algo más de detalle el funcionamiento del programa.
Es claro que el único punto confuso es la acción de la línea "while (!++*p++);", el resto del programa es bastante normal. Para interpretarla, puede verse teniendo en cuenta la prioridad de los operadores que es equivalente a realizar "while (!(++(*(p++))));". Esto corresponde a:
- Incrementar p devolviendo su valor original, que podemos llamar p'.
- Incrementar el valor apuntado por p'.
- Si el valor apuntado por p' es ahora 0, volver al paso 1. En caso contrario, salir.
- (1) p <-- &buffer[1]
- (2) buffer[0] <-- 1
- (3) Sale porque buffer[0] != 0
- (1) p <-- &buffer[1]
- (2) buffer[0] <-- 2
- (3) Sale porque buffer[0] != 0
- (1) p <-- &buffer[1]
- (2) buffer[0] <-- 0
- (3) Vuelve a "1" porque buffer[0] == 0
- (1') p <-- &buffer[2]
- (2') buffer[1] <-- 1
- (3') Sale porque buffer[1] != 0
En otro área completamente diferente, encontraron en México una caverna llena de extraordinarios cristales de yeso hidratado (sulfato de calcio):
En el sitio de National Geographic pueden observarse otras fotos espectaculares y más detalles sobre el descubrimiento (por ejemplo, el porqué de los trajes naranjas :-). (Via Robin Hanson.)
No hay comentarios:
Publicar un comentario