有關C語言運算子的幾個問題及解答
1.int i = 0;
int j = 0;
if( (++i>0)||(++j>0) )
{
printf("i = %d j = %d \n",i,j);
}
輸出多少呢?
i = 1 j = 0 ,由於 或|| 運算子的左面為真則不再判斷右面是否為真,其結果即為真;如果||左面為假則還要繼續判斷右面,來決定最終結果。
對於 與&& 運算子,左面為假則不再判斷右面,結果即為假,左面為真還要繼續判斷右面。
2..int i = 0;
int j = 0;
j = (i++,i++,i++);
printf("i = %d j = %d \n",i,j);
輸出多少呢?
i = 3 j = 2 ,++作為字尾時先不改變i的值,運算結束後再進行加一;“i++,”為一個計算單位,運算結束後i值為1,最後個i++後沒有逗號不算做一個計算單位,因此j的值為2,此時i的值也為2,但是j = (i++,i++,i++);執行結束後,還有一個分號結尾的計算單位,所以i還要加一,最終i = 3.(逗號","算作一個計算單位)
3.int i = 0;
int j = 0;
j = (i++) + (i++) + (i++);
printf("i = %d j = %d \n",i,j);
輸出結果如何?
i = 3 j = 0 ,j = (i++) + (i++) + (i++);中只有一個計算單位,所以i 的值先不變,最後執行3次加一操作。(分號";"算作一個計算單位)
4.int i = 0;
int j = 0;
j = (++i)+ (i++) + (i++);
printf("i = %d j = %d \n",i,j);
輸出結果如何?
i = 3 j = 3 ,執行(++i)後i值為1,之後的i值不變,所以j為3,j = (++i)+ (i++) + (i++);語句結束後一個計算單位結束,執行2次i加一。
5.int i = 0;
int j = 0;
j = (i++) +(++i) +(i++);
printf("i = %d j = %d \n",i,j);
輸出結果是 i = 3 j = 2 ?
實際上i = 3 j = 3 ,由於 + 雙目運算子 (左右兩面相加) ,所以(i++)的結果為0,(++i)的結果為1,那麼i = 0和i = 1 就矛盾了,系統會取加號右面的i = 1,j = 1+1+1;結果為3.(這種單個變數連續加的問題很少遇到)
6.上面介紹了兩類計算單位,實際上還有一種:for(;;)
for(表示式1;表示式2;表示式3)
{
語句
}
a.執行表示式1
b.執行表示式2,如果為真則執行語句,否則跳出迴圈
c.執行表示式3 然後跳轉到b
這裡的 執行表示式3 就相當於一個計算單位,因此表示式3中常用的i++ 與 ++i 效果是一樣的。