zoukankan      html  css  js  c++  java
  • 暑假工作日志——一些变量与“零值”的比较

    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)的情况。

  • 相关阅读:
    浅析 KMP
    【GOJ 3049】玩具
    较详细的gdb入门教程
    【GOJ 2963】记者
    【GOJ 2961】数数
    GF OIer's Talk 维护笔记
    Linux 中 UFW 的使用
    开源是什么?能吃吗?
    个人介绍
    NOIP2020 爆零记
  • 原文地址:https://www.cnblogs.com/wan0807/p/4791851.html
Copyright © 2011-2022 走看看