我認為這將是一個無限回圈,因為i的值是遞減的。但回圈在回傳1時停止。為什么?
int i ;
for (i = 5; i; i-){
printf("%d
",i)。
}
return 0;
}
uj5u.com熱心網友回復:
在C語言中,任何在條件中使用的非零整數或非空指標都評估為真,而任何零值或空指標都評估為假。因此,舉例來說:
if (5) {
printf("這總是執行。
")。)
}
if (0) {
printf("You will never see this.
")。)
}
在你的案例中,回圈是
for (i = 5; i; i--) {
/* ... */
}
回圈條件是i,意思是 "回圈而i不為零,一旦i變為零就停止"。結果是,一旦i降至零,回圈就停止運行。這意味著你最后一次看到回圈運行是在i = 1的時候,因為在那之后它就降到了零。
uj5u.com熱心網友回復:
一個for回圈有3個部分:
- 初始化(在回圈的第一次迭代之前執行),在你的例子中
i = 5 - 條件(在回圈的每次迭代前執行),在你的例子中
i。
- 最終運算式(在回圈的每次迭代后執行),在你的例子中
i--
在大多數for回圈中,你會發現條件是一個比較,例如:i > 0,然而在你的例子中,條件是一個0的值。
在大多數語言中,0被認為是false,所以一旦達到這個數字,它將停止for回圈的執行。
uj5u.com熱心網友回復:
注意for回圈的語法
for (initializationStatement; testExpression; updateStatement)
{
// 回圈體內的陳述句。
}
第二部分是一個testExpression。你的testExpression是測驗i是true(非零)還是false(零。)
在1被列印出來后(i==1),并通過updateStatement回圈回到起點(i--),i被設定為0。你的testExpression是0,被視為false。所以這個回圈立即存在。( 0也不會被列印出來。)
如果你想讓你的代碼成為一個無限列印i的回圈,你可以把testExpression留空。
uj5u.com熱心網友回復:
在C語言中,任何在條件中使用的非零整數或非空指標都會評估為真,而任何零值或空指標都會評估為假
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/322453.html
標籤:
