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 是變數的宣告 宣告不產生 如函式原型 變數宣告 結構宣告 巨集宣...