[英]Why is this for loop with an unsigned int endless?
for (unsigned i = 0; i < 3; i++) {
if (i == 2) i = -1;
}
我不明白為什么這個循環是無限的。 我知道當i = -1
但 UINT_MAX 大於 3 時它會環繞。
如果我重寫您的代碼,那么可能會更清楚地了解原因
unsigned i = 0;
while (i < 3) {
if (i == 2) i = -1;
i++;
}
i++
發生在循環的末尾,所以i
變成了0
。
因為一旦i
變成2
它將變為0
然后使用i++
,循環繼續直到再次i=2
,因此它再次變為0
並且相同的過程將繼續。
如果你想在循環的條件下
for (unsigned i = 0; i < 3; i++) {
if (i == 2) i = -1;
}
有比較UINT_MAX
與3
你應該寫
for (unsigned i = 0; i < 3; i++) {
if (i == 2) i = -2;
}
在這種情況下,增加i
你會得到UINT_MAX
。 否則,如果i
已經包含UINT_MAX
則在循環表達式i++
增加它,您將得到 0,結果是一個無限循環。
或者你可以寫例如以下方式
for (unsigned i = 0; i < 3; i++) {
if (i == 2) i = ~i;
}
因為for循環會按照這個安排執行
for (unsigned i = 0; i < 3; i++)
1>>僅在第一次迭代時的初始值 (i=0) 2>>檢查終止條件
(i<3)
3>>執行代碼
(if(i==2) i=-1)
4>>增量步 i++ 所以(我總是變為零)為(-1+1=0)所以這個循環是無限循環
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.