Рассмотрим следующий код:Почему следующий код переходит в бесконечный цикл?
const char *s = "a b c d !";
const char *p = s;
top:for(; *p; p++) {
switch(*p) {
case 0x20:
case '\n':
goto top;
default:
putchar(*p);
}
}
Может кто-то объяснить, почему он входит в бесконечный цикл вместо остановки, когда *p
является NULL
? Я имел в виду следующее: когда *p
равно 0x20
или \n
, перейдите к началу цикла снова, так как он проверяет условие и оценивает выражение p++
. Таким образом, я не вижу причин для его бесконечного цикла, или я действительно не понимаю, как операторы goto
и labels
работают на языке программирования C.
Обязательно: http://xkcd.com/292/ – Mysticial
@Mysticial:? :-( – Jack