一、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层以内。