5.4.1 表达式数组
表达式是由运算符和操做数组合构成的。最简单的表达式是一个单独的操做数,以此做为基础能够创建复杂的表达式。函数
每个表达式都有一个值code
C的一个重要属性是每个C表达式都有一个值。对象
5.4.2 语句io
语句是构造程序的基本成分。程序是一系列带有某种必须的标点的语句集合。一条语句是一条完整的计算机指令。在C中,语句用结束处的一个分号标识。class
什么构成了一条完整的指令?首先,C把任何后面加有一个分号的表达式看处是一个语句。基础
尽管一个语句(或者至少是一个有做用的语句)是一条完整的指令,但不是全部完整的指令都是语句。分号用来识别确实是语句的指令。变量
程序清单 5.13object
/*addemup.c--4种类型的语句*/ #include <stdio.h> int main() { int count,sum; /*声明语句*/ count=0; /*赋值语句*/ sum=0; /*同上 */ while (count++<20)/*while 语句*/ { sum=sum+count; }; print("sum=%d\n",sum);/*函数语句*/ return 0; }
上例中已经遇到了四种语句:循环
注意一个声明语句不是一个表达式;
赋值语句,它为变量分配一个值。赋值语句是表达式语句的一个特例。
函数语句引发函数的执行。
while语句有三个不一样的部分,首先是while关键字,而后是在圆括号里的一个判断条件,最后是知足判断条件时将执行的语句。while语句属于一类有时被称为结构化语句的语句。
反作用和顺序点
反作用是对数据对象或文件的修改。例如语句states=50;的反作用是将变量states的值设置为50.这是反作用?这看起来更像是主要目的!然而,从C的角度来看,主要目的是对表达式求值。
给C的一个表达式4+6,C将计算它的值为10,给C一个表达式 states=50 ,C将计算它的值为50,计算这个表达式的反作用就是把变量states的值改变为50.增量和减量运算符也有反作用,它们主要因为反作用而被应用。
一个顺序点(sepuence point)是程序执行中的一点;在该点处,全部的反作用都在进入下一步前被计算。在C中,语句的分号标志了一个顺序点。它意味着在一个语句中赋值运算符、增量及减量运算符所作的所有改变都必须在进入下一个语句前发生。任何一个完整的表达式的结束也是一个顺序点。
什么是一个完整的表达式呢?它不是一个更大的表达式的子表达式。完整表达式的例子包括一个表达式语句里的表达式和一个在while循环里做为判断条件的表达式。
顺序点帮助阐明后缀增量动做什么时候发生。例如:
while (guests++<10)
printf("%d \n",guests);
有时初学者会设想在本程序中“先使用该值,而后增长它的值”的意思是在使用了printf()语句后再增长guest的值。然而,guests++<10是while循环的判断条件,因此它是一个完整的表达式,这个表达式的结束就是一个顺序点。所以C保证反作用(增长guests的值)在进入printf()前发生。
同时使用后缀形式保证了guests在与10比较后才增长。
如今考虑这个语句:
y=(4+ x++)+(6+ x++);
表达式4 + x++不是一个完整表达式,因此C不能保证在计算子表达式4+x++后当即增长x。这里完整表达式是整个语句,而且分号标记了顺序点,因此C能保证的是在程序进入后续语句前x将被 增长两次。C没有指明X是在每一个子表达式计算后被增长仍是整个表达式被计算后增长,这就是咱们要避免使用这类语句的缘由。
5.4.3 复合语句(代码块)
复合语句是用花括号组织起来的两个或更多的语句;它也被称为代码块。