暑假工作日志——一些变量与“零值”的比较
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)的情况。