C語言while的小細節

2021-10-21 21:11:21 字數 1200 閱讀 3667

最近幾天在看《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 求解 迴圈繼續條件 表示式。如...