C关键字解读——sizeof, 循环判断语句

来源:互联网 发布:mp3剪辑合并软件 编辑:程序博客网 时间:2024/06/07 05:42

一、sizeof

         sizeof是关键字不是函数

         int i = 0;

A)sizeof(i)         B)sizeof(int)         C)sizeof i         D)sizeof int

其是A)B) C)是正确的,D是错误的      

总结:用sizeof计算变量所占空间大小时,括号可以省略;而计算类型大小时不能省略。

在32位系统下,int *p = NULL;

         sizeof(p) = 4 = sizeof(int *)           计算的是指针占用几个字节

         sizeof(*p) = 4 = sizeof(int)           计算的是整形数占用几个字节

         sizeof(int *p) = 4                            表示计算指向整形的指针变量P所占的字节数

         sizeof (int) * p                                表示sizeof(int)再乘以p

         int a[100];

         sizeof(a) = 400;

         sizeof(&a) = 400;          //vc6.0编译器下面

         sizeof(a[100]) = 4;

         sizeof(&a[0]) = 4;

          

         int b [100];

         void fun(int b[100])

         {

                    sizeof(b) ;              //4

         }

二、if , else 组合

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

         bool bTestFlag = FALSE;

         A)、if(bTestFlag ==0)        if(bTestFlag == 1)

         B)、if(bTestFlag == TRUE)          if(bTestFlag == FALSE)

         C)、if(bTestFlag)                  if(!bTestFlag)

命案是C,理由~~~

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

         float fTestVal = 0.0;

         A)、if(fTestVal == 0.0)          if(fTestVal != 0.0)

         B)、if( (fTestVal >= -EPSINON) && (fTestVal <= EPSINON) );

答案是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)、正确。为什么要把NULL写在前面呢,是怕漏写了一个=,如果那样,也不会报错,但是意义完全变化了。

4、else到底与哪个if配对

         规则:else始终与同一括号内最近的未匹配的 if  语句结合。

5、if  语句后面的分号

与空语句的连用。

建议:在真正需要用空语句的时候,写成这样:

         NULL;

6、用 if  语句其它注意事项

         先处理正常情况,再处理异常情况;把正常情况的处理放在 if  后面,而不要放在 else  后面。提高效率。

         确保 if  和 else  子句没有弄反。

三、switch,  case  组合

         if   else  一般表示两个分支或是嵌套表示少量的分支。但如果分支很多的话。。。还是用 switch,  case  组合吧。

规则:

每个 case  语句的结尾绝对不要忘了加 break,  否则将导致多个分支重叠(除非你有意)。

最后必须使用 default  分支。即使程序真的不需要 default  处理,也应该保留语句:

default:

          break;

可以避免让人误以为你忘了加。

1、case  关键字后面的值的要求

规则:

         case  后面只能是整形或字符型的常量或常量表达式。

2、case  语句的排列顺序

         (1)如果所有的 case  语句没有重要性差别,按字母或数字顺序排列各条case语句。

         (2)把正常情况放在前面,把异常情况放在后面。都需要在开始和结束某一类情况的时候做出注释。

         (3)按执行频率排列。

3、使用 case  语句的其它注意事项

         (1)简化每种情况对应的操作。case  语句后面的代码尽量不要超过20行。

         (2)不要为了使用 case  语句而刻意制造出一个变量。

         (3)default  语句只用于检查真正的默认情况。所以,你想到的每种情况,都用case  来实现吧。

四、do , while , for  关键字

         (1)while  循环:先判断 while  后面括号里的值,如果为真则执行其后面的代码,否则不执行。

                  break   /    continue  的区别

                  break :  表示终止本层循环;continue :  终止本轮循环, 注意 continue  只能用在循环语句中。

         while( 1) 也可以变成 while( true)       while( 1 == 1)    或者 while( ( bool ) 1);

         (2)do   while   :先执行 do  后面的代码,然后再判断 while  后面括号里的值,如果为真,循环开始;否则,循环不开始。

循环语句的注意点:

在多重循环中,如果有可能,应当将最长的循环放在最内层,最短的循环放在最外层,提高效率。

for( n = 0; n < 10; n++) 要比 for( n = 0; n <= 9; n++) 更直观。所以一般采用前面那种写法。

不能在for  循环内修改循环变量的值 ,防止循环失控。

循环体内的代码 最好不要超过20行,且把循环嵌套控制在3层以内。

 

 

原创粉丝点击