黑马程序员技术交流社区

标题: 特殊变量与零值作比较的写法 [打印本页]

作者: goobag    时间: 2014-4-29 20:22
标题: 特殊变量与零值作比较的写法
关于特殊变量与零值作比较,查了下书,整理了一下,很有用。


1,bool 变量与“零值”进行比较

bool变量与“零值”进行比较的if语句怎么写?

bool flag = FALSE;
A), if(flag == 0); if(fFlag == 1);
B), if(flag == TRUE); if(flag == FLASE);
C), if(flag); if(!flag);

哪一组或是那些组正确呢?
A)容易让人误会成整型变量

B)FLASE的值在编译器里被定义为0;但TRUE的值呢?都是1吗?很不幸,不都是1。Visual C++定义为1,而它的同胞兄弟Visual Basic就把TRUE定义为-1.那很显然,这种写法也不好。

C)if语句靠其后面的括号里的表达式的值来进行分支跳转的。表达式如果为真,则执行if语句后面紧跟的代码;否则不执行。那显然,本组的写法很好,既不会引起误会,也不会由于TRUE或FLASE的不同定义值而出错。




2, float 变量与“零值”进行比较

float变量与“零值”进行比较的if语句怎么写?

float Val = 0.0;

A), if(Val == 0.0); if(Val != 0.0);
B), if((Val >= -EPSINON) && (Val <= EPSINON));

A)float和double类型的数据都是有精度限制的,不能直接拿来和0.0做比较。

B)EPSINON为定义好的精度,如果一个数落在[0.0-EPSINON,0.0+EPSINON] 这个闭区间内,我们认为在某个精度内它的值与零值相等;否则不相等。把0.0替换为想比较的任何一个浮点数,那就可以比较任意两个浮点数的大小了,当然是在某个精度内。

同样的也不要在很大的浮点数和很小的浮点数之间进行运算,比如:
10000000000.00 + 0.00000000001

这样计算后的结果可能会让人大吃一惊。




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

指针变量与“零值”进行比较的if语句怎么写?

int*p=NULL;

A), if(p == 0); if(p != 0);
B), if(p); if(!p);
C) , if(NULL == p); if(NULL != p);

A)p是整型变量?容易引起误会。尽管NULL的值和0一样,但意义不同。

B)p是bool型变量?容易引起误会。

C)写法:这个写法是正确的,但样子比较古怪。为什么要这么写呢?是怕漏写一个“=”号:if(p = NULL),这个表达式编译器当然会认为是正确的,但却不是你要表达的意思。所以,非常推荐这种写法。
作者: 执着的土豆    时间: 2014-4-29 20:27
占个沙发慢慢学。
作者: 兰闻天    时间: 2014-4-29 20:34
拎个板凳坐着看
作者: jing迪    时间: 2014-5-3 00:43
写的不错 加油~~~
作者: 傘が咲く    时间: 2014-5-3 07:30
写个日记不错!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2