Chinaunix首页 | 论坛 | 博客
  • 博客访问: 457191
  • 博文数量: 62
  • 博客积分: 1312
  • 博客等级: 中尉
  • 技术积分: 1555
  • 用 户 组: 普通用户
  • 注册时间: 2012-02-24 18:10
文章分类

全部博文(62)

文章存档

2014年(1)

2013年(5)

2012年(56)

分类: C/C++

2012-03-26 16:10:50

一:理解函数声明:
float num1,num2;//含义:对其求值时num1,num2是浮点型的。
float ((num1)); //含义:对其求值时((num1))是浮点型的,由此可知num1也是浮点型的。
float ff(); //含义:表达式ff()求值的结果是一个浮点数,也就是说ff是一个返回值为浮点数的函数
float *pf; //含义:*pf是一个浮点数,pf是一个指向浮点数的指针。
以上的几种声明还可以组合起来,就像在表达式中进行组合的一样。
ex:
float *g(); //表示:该函数的返回值类型为指向浮点数的指针,
float (*h)()  //表示:h所指向的函数返回浮点型
(float (*)()) //表示:指向返回值为浮点类型的函数指针的类型转换符
(*(void(*)())0)() //构造这类表达式只需要按照使用的方式声明
二:运算符的优先级问题:
例1.if((flags & FLAGS) != 0)
不能写成
if(flags & FLAGS != 0)
因为 != 的优先级高于&。
例2.假设hi与low是0——15之间的整数,而res是一个整数且高四位与hi完全一致,且低四位与low完全一致,不能写成
res = hi<<4 + low;
因为+的优先级要高于<<。故而上式其实就相当于res = hi << (4 + low);
应该写成:res = (hi << 4) + low;或者res = hi << 4 | low; //注:|的优先级低于<<
说明:用括号虽然能够解决优先级的问题,但是程序当中用太多的括号则会降低程序的可读性。
优先级最高:数组下标操作符,函数调用操作符,各种结构成员的选择操作符。结合方式为自左向右。
优先级次之:单目运算符。*P++;相当于*(P++)
优先级次之:双目运算符。优先级由高到低:算数——>移位——>关系——>逻辑——>条件
三:语句结束标志的分号:
 ex:
if(a>b);
y=x;

if(a>b)
y=x;
完全不同,分别相当于执行了:
if(a>b)
{}
y=x;

if(a>b)
{
 y=x;
}  
缺了分号同样会造成很大的危险:
ex:
if(n<3)
 return
logrec.date = x[0];
logrec.time = x[1];
logrec.code = x[2];
分析:return后面缺少一个分号,但是程序会编译通过,只是将logrec.date = x[0]当做程序的返回值。即:
if(n<3)
 return logrec.date = x[0];
logrec.time = x[1];
logrec.code = x[2];
四.switch语句
 使用该语句时要注意case选项后面的break。因为C语言中把case标号当做真正意义的标号,因此程序的控制流程会径直通过case语句。而不会受到任何影响。
 如果程序员“刻意”省去某一个case的break,则会表达出用其它语言难以表达的一些控制结构。
五.函数调用:
C语言中即使函数不带参数,也应该有参数列表。
ex:
f();
而如果写成
f;
则表示该处什么都不做,更确切的说这个语句计算函数f的地址。却不调用该函数。
六:“悬挂”else引发的问题:
else始终与同一对括号内最近的未匹配的if结合。在使用的时候要注意用括号制定if的范围等等。
阅读(1475) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~