您的位置:首页 > 编程语言 > C语言/C++

非典型性C语言教程-1.3 表达式,控制语句

2007-07-06 11:09 197 查看
C语言程序由函数和变量组成。函数由表达式和控制语句组成。

表达式主要就是运算符和常数,变量,常量的组合。比如x+3*y,这个表达式 用到了2个运算符+,*,用到了2个变量x,y,一个常数3。运算符有很多,还有比较复杂的优先级关系,+*是算术运算符,算术运算符好包括:一元-,二 元-,/,%, ++, --。逻辑运算符||,&&amp;,!。位运算符|, &, ^。还有(), 取指针内容*, 取地址&。选择运算符 condition?x:y。还有关系运算符==,=,>,<,>=,<=等等。还有不常用的,运算符,比如 x=x+3, y=y+2;这个运算符的值是最后一个表达式的值。 运算符是有优先级的,有些优先级很好理解,比如* /优先于+ -,但是有些就不那么明显了。比如*p++这个表达式,你知道它的优先级吗?代码主要是写给人看的,其次才是写给机器看。第二次强调了:)。有些很无聊的C语言考试经常考些运算符的优先级问题,比如象刚才那样的代码。但是应该合理的运用括号,来让你的代码更清晰可读,你写的代码让人读起来困惑并不能显示你的水平高。*p++这样的代码最好写成*(p++)或是(*p)++。

赋值语句也是一个表达式,比如a=3这个表达式的值是a的值,也就是3。这就是一个著名的错误的由来。
if(a=3)
.......
本来应该是写a==3的,但是写成了a=3,而恰a=3是一个合法的表达式,且其值等于3。而C语言又恰好将一切非零的值当作逻辑真值,结果这个条件判断就永远是真了。

逻辑表达式的值也是令人困惑的。虽然C语言中认为0是逻辑假,非0的一切值都是逻辑真。但是你知道3+ (3||4)=? 这个表达式的值在VC8下是4,在gcc下也是4。但是最好还是不要写这样的代码,同样的原因,可能让人感到困惑。

控制语句就是都熟悉的if, else, for, while, do while, switch。只讲一下需要注意的一些错误。对于if最著名的错误就是上面这个。这个错误在C的后代Java和C#中已经被修改了。

for是有很多灵活的用法的,不一定非得是for(i=0; i<n;i++)。for中间可以是任何表达式比如:for( ; i++, i<n; )。

while和do while没有什么好说的。switch的需要有注意的是别犯这种错误:
switch (a)
{
case 1:
case2:
..........
注意第二个case,中间忘记了空格。这样编译器不会报告任何的错误,因为编译器将case2:当成了一个label。C语言中是有goto的,goto到的地方就是label。上面的代码导致a=2的情况永远不会被执行。 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  语言 c 编译器 gcc java c#