c語言中for迴圈條件的邏輯分析

2021-10-02 18:28:51 字數 1222 閱讀 6262

for(;p<=temp->list+length-1&&*p!=value;p++) ;//不滿足迴圈條件,退出

if(p<=temp->list+length-1)     //是*p==value的情況         

return false;         //是p>temp->list+length-1的情況

分析:當p>temp->list+length-1  或者 *p==value時,退出for迴圈,

//此時只需排除上述兩者可能的一種,就一定是另一種可能。

理解方法1:有件事,是a或者b做的,已知不是a,那麼肯定就是b了。

理解方法2:理解成電路併聯:已知開關1和開關2併聯,開關1或開關2 閉合都會使電路導通,其中就開關1,2理解成退出for迴圈的條件。

現在發現電路導通,但是開關1並沒有閉合,則一定是上表中的第二種情況,即開關2閉合了。

開關1(p>temp->list+length-1)

開關2(*p==value)電路1

0101

1111

理解方法3:理解成電路串聯,開關1且開關2閉合,電路導通,其中就開關1,2理解成for迴圈中的條件,如下所示:

開關1(p<=temp->list+length-1)

開關2(*p!=value)電路1

0001

0000

111上表中,每一行的的兩個開關之間的關係是 且 的關係,如第一行中,開關1閉合且開關2斷開則電路不通,如下3行一樣。

for(;p<=temp->list+length-1&&*p!=value;p++) ;//不滿足迴圈條件,退出

if(p<=temp->list+length-1)     //這條的含義是:p<=temp->list+length-1且*p==value的情況         

return false;         //是p>temp->list+length-1且*p!=value   和  p>temp->list+length-1且*p==value兩種情況都不合理。

總結:理解思路3更好一些,

兩個迴圈條件且的關係->迴圈條件不滿足,跳出迴圈->有3種條件情況,只取符合要求的那一種,即p<=temp->list+length-1且*p==value的情況

C語言中的條件編譯

條件編譯的功能使得我們可以按不同的條件去編譯不同的程式部分,因而產生不同的目 標 檔案。這對於程式的移植和除錯是很有用的。條件編譯有三種形式,下面分別介紹 第一種形式 ifdef 識別符號 程式段 1 else 程式段 2 endif 它的功能是,如果識別符號已被 define 命令定義過則對程式段...

C語言中的條件編譯

很久沒更新了。因為工作之後比較忙,更多的學習記錄會寫在公司的wiki裡 目前在公司主要做c c 原來了解不夠深入,所以目前從基礎開始簡單記錄一點東西。條件編譯相關的預編譯指令,包括 define undef ifdef ifndef if elif else endif defined。define...

c語言中的條件編譯

即意味著編譯預處理 define debug 是一種沒具體定義值的預定義 僅僅是定義過 用在條件編譯中如標頭檔案中 ifndef debug define debug endif 2.int i 是變數的定義 extern int i 是變數的宣告 宣告不產生 如函式原型 變數宣告 結構宣告 巨集宣...