零值比較--BOOL,int,float,指針變量與零值比較的if語句


  這是程序員面試的一道常見題,也是個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 或者1、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 語句。
標准答案:

if (p == NULL)

if (p != NULL)

如下寫法均屬不良風格。

if (p == 0)        // 容易讓人誤解p是整型變量

if (p != 0) 

if (p)                // 容易讓人誤解p是bool型變量

if (!p) 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM