暑假工作日志——一些变量与“零值”的比较

1、bool型变量如何与零值进行比较?

bool bTestFlag = FALSE;(想想为什么bool型变量初始化为FALSE)

a、  if(bTestFlag==0) /if(bTestFlag==1)

b、  if(bTestFlag==TRUE)/if(bTestFlag==FALSE)

c、  if(bTestFlag)/if(!bTestFlag)

写法a,很容易让人误以为bTestFlag是一个整型变量,不好

写法b,FALSE的值在编译器中被定义为0,但是TRUE的值呢?在Visual C++中被定义为1,而在Visual Basic中则被定义成-1。所以这样写也不好。

写法c,大家都知道if语句是依靠其括号里的值来进行分支跳转的,如果括号里的值为真则执行紧跟if后面的语句,否则不执行。那么这种写法既不会引起误会,也不会因为TRUE和FALSE的不同定义造成错误。

2、float变量与零值的比较

float fTestVal=0.0;

a、  if(fTestVal==0.0)/if(fTestVal!=0.0)

b、  if((fTestVal>=0.0-EPSINON)&&(fTestVal<=0.0+EPSINON))//EPSINON为定义好的精度

a中因为float和double都是有精度限制的,这样直接用来和0.0进行比较,结果是不对的。

例如:PI=3.1415926536,用PI去减去0.00000000001,结果是多少?你能说前后两个值一样么?

b中EPSINON为定义好的精度,如果有数落在[0.0-EPSINON,0.0+EPSINON],我们就认为这个数在某个精度EPSINON内与0.0相等,把0.0替换成任意一个浮点数,我们就可以比较两个任意浮点数在某个精度内是否相等了。

3、指针变量与“零值”进行比较

int *p=NULL;//定义指针同时一定要初始化,避免出现野指针

a、  if(p==0)/if(p!=0)

b、  if(p)/if(!p)

c、  if(NULL==p)/if(NULL!=p)

a中p是指向整型变量的指针,直接与0进行比较容易产生误会,尽管NULL和0的值一样,但是意义不同。

b中与a一样,p不是bool型变量,容易产生误会,两者意义也不一样。

c中,这个写法是正确的,但样子比较奇怪,为什么不这样写呢?if(p == NULL),这是为了防止出现if(p = NULL)的情况。

原文地址:https://www.cnblogs.com/wan0807/p/4791851.html