前面其实我们已经不知不觉多次使用了表达式和语句,接下来,我们深入地了解一下它们。C的基本程序由语句组成,而大多数语句由语句构成。
1.表达式
表达式由运算符和运算对象组成。最简单的表达式就是一个单独的运算对象,运算对象可以是常量、变量或二者的组合。一些表达式由子表达式(子表达式即一个完整表达式的一部分)组成。下面是一些表达式:
C语言中表达式的一个最重要的特性就是,每个表达式都有一个值。要获得这个值必须根据运算符优先级规定的顺序来执行操作,如q = 2 * 3
作为一个整体的值就是6。
2.语句
语句是C程序的基本构建块,一条语句相当于完整的计算机指令。在C中,大部分语句都以分号结尾,因此
最简单的语句是空语句;
,但类似这些语句在程序中什么也没做,不算是有用的语句。更准确地说,语句可以改变值或调用函数。
虽然一条有用的语句相当于一条完整的指令,但不是所有的指令都是语句,参考下面例子:
其中,y = 6是一条完整的指令,但是它只是语句的一部分。因为一条完整的指令不一定是一条语句,所以分号用于识别在这种情况下的语句,另外,声明并不是表达式语句,因为去掉分号之后,声明并没有值,不是一个表达式。
3.副作用和序列点
副作用是C语言中的一个术语,副作用是对数据对象或文件及进行修改。例如,语句state = 50;
,从C的角度来说,它的主要目的是对表达式求值,即50,副作用就是将state的值改为50;再例如,一个printf()语句,它显示的信息是副作用,它的主要目的是返回打印字符的个数。
序列点是程序执行的点,在该点上,所有副作用都在进入下一步之前发生。在C中,语句中的分号标记了一个序列点,另外,任何一个完整表达式也是一个序列点。
4.复合语句(块)
复合语句是用花括号括起来的一条或多条语句,复合语句也成为块。
在第一个程序段中,while循环中只有一个表达式语句,而在第二个程序段中,用花括号将两个表达式语句括起来,变成while循环的一部分,它们就是复合语句,整个复合语句被视为一条语句。同时,while语句也是一种迭代语句,有时也被成为结构化语句。