這是程序員面試的一道常見題,也是個C++基礎問題。若只在大學裏看過幾本基礎的編程入門書,看見這道題可能會以爲奇怪,不就是和0比較嗎,直接拿出來比就是了,其實非也。下文引自google搜索結果,出處不詳,高手能夠無視,菜菜留下,記得作好筆記。
首先給個提示:題目中要求的是零值比較,而非與0進行比較,在C++裏「零值」的範圍可就大了,能夠是0, 0.0 , FALSE或者「空指針」。int型變量 n 與「零值」比較的 if 語句就是:
程序員
if ( n == 0 ) if ( n != 0 ) 以下寫法均屬不良風格.。 if ( n ) // 會讓人誤解 n 是布爾變量 if ( !n )
請寫出 BOOL flag 與「零值」比較的 if 語句。
根據布爾類型的語義,零值爲「假」(記爲FALSE),任何非零值都是「真」(記爲TRUE)。TRUE 的值到底是什麼並無統一的標準。例如Visual C++ 將TRUE 定義爲1,而Visual Basic 則將TRUE 定義爲-1。因此咱們不能夠將布爾變量直接與TRUE、FALSE 或者一、0 進行比較。
標準答案:
面試
if ( flag ) if ( !flag ) 以下寫法均屬不良風格。 if (flag == TRUE) if (flag == 1 ) if (flag == FALSE) if (flag == 0)
請寫出 float x 與「零值」比較的 if 語句。
千萬要留意,不管是float 仍是double 類型的變量,都有精度限制,都不能夠用「==」或「!=」與任何數字比較,應該設法轉化成「>=」或「<=」形式。(爲何?文章以後有詳細的討論,可參考)
假設浮點變量的名字爲x,應當將
if (x == 0.0) // 隱含錯誤的比較
轉化爲
if ((x>=-EPSINON) && (x<=EPSINON))
其中EPSINON 是容許的偏差(即精度)。
標準答案示例:
編程
const float EPSINON = 0.00001; if ((x >= - EPSINON) && (x <= EPSINON) 以下是錯誤的寫法。 if (x == 0.0) if (x != 0.0)
請寫出 char *p 與「零值」比較的 if 語句。
標準答案:
google
if (p == NULL) if (p != NULL) 以下寫法均屬不良風格。 if (p == 0) // 容易讓人誤解p是整型變量 if (p != 0) if (p) // 容易讓人誤解p是bool型變量 if (!p)