在乙個表示式中,無論i++和++i出現的次數,順序如何,也無論+-*/的混合運算如何,都遵循如下規則:
1.
所有的i++和++i的值都相等為a。
2.
a等於執行所有++i後,i的值。
原因是編譯如此工作:
1.找到所有的++i,執行
2然後找到所有的i++,執行
3計算表示式。
int i = 3;
inti,a;
i=3;
a = (++i)+(i++)+(++i)+(i++); 5+5+5+5=20
printf("a=%d /n",a);
i=3;
a = (i++)+(++i)+(i++); 4+4+4=12
printf("a=%d /n",a);
i=3;
a = (++i)*(i++)*(++i); 5*5*5=125
printf("a=%d /n",a);
i=3;
a = (i++)+(++i); 4+4=16
printf("a=%d /n",a);
i=3;
a = (++i)+(i++)*(++i)*(i++)*(i++);5+5*5*5*5=630
printf("a=%d /n",a);
以上程式在vs2008,控制台程式中經過驗證。
i 和i 的用法
式1的運算過程 第一步,第乙個 i計算後i 1,i計算的結果為1 第二步,然後就是i 的計算後i的值不變仍為1,i 的計算結果為1 第三步,接著計算前一步驟中i 自增後的值,此時i 2,再就是第二i 的計算,i的值不變仍是2,所以這一步中i 的計算結果為2 第四步,同上一步計算前一步驟中i 自增後的...
i和i 的區別
大家都應該知道i 和 i的區別,前者是先使用i的值,然後再增加1,而後者是先增加1然後再使用i的值。但是i 和 i那個更好呢?我們實現角度來看 前者是將i值加1後賦給i,然後返回i本身 而後者是先用個臨時變數儲存i值,然後將i值加1賦給i,然後返回臨時變數的值。內建資料型別他們的效率差不多,看他們的...
i 和 i 的輸出
include include include int main int argc,const char argv 輸出結果為 3 3 3 1 0 0 在vs中 printf輸出時,從輸出表示式右到左計算,然後從右到左入棧,再出棧 vs中的彙編下的 5 int main int argc,const...