for (int i = 0; i < n 1; i)
{
sum = sum i;
}
for (int i = 0; i < n 1; i )
{
sum = sum i;
}
由于函式呼叫引數中的 i 和 i ,兩段不同。
但它就像 i 只以 0 開頭一樣作業。為什么甚至 i 也以 0 開頭?
uj5u.com熱心網友回復:
這兩個片段之間絕對沒有區別。i vs i僅在與同一運算式中的其他運算子混合時才有意義。大多數時候這是一個壞主意,因為i / i帶有副作用。
uj5u.com熱心網友回復:
一個通用的for回圈,如
for (a; b; c)
{
d
}
相當于
{
a;
while (b)
{
d;
c;
}
}
請注意“增量”運算式c是如何在回圈體的主陳述句之后出現的。
對于您的回圈,這意味著它們將等效于:
{
int i = 0;
while (i < n 1)
{
sum = sum i;
i ; // or i
}
}
由于在計算之前不會發生增量,因此回圈i之間沒有實際差異。兩者都會導致完全相同的結果。sum
附帶說明:請記住在回圈之前顯式初始化sum為零,否則它可能具有不確定的值(可能被視為垃圾)。
uj5u.com熱心網友回復:
您發布的兩個 for 回圈的行為完全相同。它們相等的原因,也回答了為什么兩個回圈都從 開始的問題0,是增量(i 或 i)只發生在{} 中的{expression}執行之后,并且每次執行之后。
uj5u.com熱心網友回復:
您的代碼將產生相同的結果。
下面的代碼會產生不同的結果。
int i = 0;
while (i < 5) {
printf("%d\n", i);
}
// 1
// 2
// 3
// 4
// 5
i = 0;
while (i < 5) {
printf("%d\n", i );
}
// 0
// 1
// 2
// 3
// 4
在我的示例中,底部for回圈列印出0而頂部for回圈不列印的原因是因為printf并i / i形成一個組合運算式,其中頂部i遞增然后從記憶體訪問,而底部回圈i是從記憶體訪問和然后遞增。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/410520.html
標籤:
