2012-01-03 2 views
-2

Похоже, что следующее из PHP manual regarding for loops неверно.Являются ли C для циклов, отличных от PHP для циклов?

Они ведут себя как их коллеги C.

Это мое понимание for петель.
В C
for (i = foo; i < 10; i++) { /* body */ }
эквивалентно

if (i = foo) 
{ while (i < 10) 
    { /* body */ 
     i++; 
    } 
} 

В PHP сопоставимый петли
for ($i = $foo; $i < 10; $i++) { /* body */ }
становится

$i = $foo; 
while ($i < 10) 
{ /* body */ 
    $i++; 
} 

Разница заключается в том, что в PHP $i = $foo не является условием, а скорее удобное место для заявления. Предположим, мы сменим один = на ==. Различие становится значительным. Это верно? Если это так, то петли PHP и C ведут себя по-другому, а руководство неверно, правильно?

+7

Я думаю, что ваше понимание цикла C не так. AFAIK оба языка ведут себя как ваш последний пример кода. – DaveRandom

+1

¿if (i = foo)? – Sirs

+0

Удивительно, как долго может зависеть неправильное представление. Я всегда думал, что выражение init является условием, и люди всегда ставят там назначение, которое будет оцениваться как true. – htoip

ответ

13

Они точно такие же, но ваше понимание петлей for C является неправильным. Они такие же, как и в PHP.

for (x; y; z) { /* body */ } 

почти как

x; 

while (y) { 
    /* body */ 
    z; 
} 

Несмотря на то for и while примеров в C не являются точно такой же из областей и вещей.

+0

'+ 1' от меня^_^ – Neal

+2

lol @« Они точно такие же ... »и« Это не совсем то же самое ..." – Wiseguy

+0

@Wiseguy hehe Я не заметил, что :-P – Neal

8

Это является не правда:

if (i = foo) //what?? 
{ while (i < 10) 
    { /* body */ 
     i++; 
    } 
} 

: C цикл в основном:

int i = foo; 
while (i < 10) 
{ /* body */ 
     i++; 
} 
1

Это было некоторое время, так как я узнал, или провести время с C, но я m довольно уверен, что первый оператор в C for-loop является выражением, устанавливающим переменную в значение, как и в C.

0

В C i=foo действительно является условием, это эквивалентно (i=foo)!=0, поскольку 0 является false в C и не является 0 является true.

Проблема в том, что петли C for не работают так, как вы думаете, что они делают, о чем свидетельствует тот факт, что вы можете инициализировать цикл for с помощью i=0.

Смежные вопросы