最近幾天在看《cpr
imer
plus
c primer plus
cprime
rplu
s》的第五章——運算子、表示式和語句,看到思考題第八題的時候,發現了乙個以前可能會忽略的點。
題目如下:
下面的程式將列印出什麼內容?
//problem
#include
intmain()
return0;
}
很顯然,列印1到10 。
這個while迴圈是這樣執行的:
先判斷n的值是否小於10,再進行n+1,最後進行while的中的語句。
相當於
//problem*
#include
intmain()
return0;
}
而非
#include
intmain()
return0;
}
注意上面兩串** n++ 的位置的區別
當然,這是最基礎的部分,但是我又想到,在while(n++…)的載體上,進行下面一段**會怎麼樣呢?
//**1
#include
intmain()
printf
("%d\n"
, n)
;return0;
}
我在未執行這段**前,想的是這段**和下面一段**是一樣的:
//**2
#include
intmain()
printf
("%d\n"
, n)
;return0;
}
然而,上面的「**1」輸出結果是11,「**2」輸出結果是10 。
我們來分析一下。
先看**2:
最後一次進入迴圈時,n=9,執行完 n++ 出迴圈語句後n變為10,while中的 n<10 為假,執行printf函式。
但是**1是這樣執行的:
當 n=10 時,程式判定while的判斷框中內容為假,但是程式先執行了 n++ ,再跳出迴圈,所以輸出的值為11 。
以前認為「 problem 」和「 problem* 」是等價的,但是不是這樣的,書真是常看常新啊。
C語言中的小細節
1.位溢位 int和long現在都是4個位元組,不過現在的c裡面都沒給出乙個越界溢位的api函式,得自己注意 a 0xffffffff,b 0xffffffff 然後 a b,或者a b都會溢位,但是這樣的一處float和double都會遇到 在asm裡面會用jo和jno來判斷溢位標誌位 2.uns...
C語言小細節(三)
第一種 int a int p a 在初始化時另p指向int a的 p 1 第二種 int a int p 先定義乙個指標p p a 再另其指向a p 1 int arr 6 int pa arr 初始化指標pa指向陣列arr 6 的第乙個元素 int pb 初始化指標pb pb arr 令其指向a...
C語言 while語句
案例 用while語句求1 100的累計和。案例 用while語句求1 100的累計和。程式功能 求1 100的累計和 main printf sum d n sum 程式運 況如下 sum 5050 1 一般格式 while 迴圈繼續條件 2 執行過程 執行過程 1 求解 迴圈繼續條件 表示式。如...