表达式
表达式由运算符和运算对象组成。运算对象可以是常量、变量或二者的组合。
每个表达式都有一个值,比如5>3的值是1,这种表达式的值不是1就是0。条件为真,值为1,条件为假,值为2.
语句
语句是c程序的基本构建块。一条语句相当于一条完整的计算机指令,大部分以分号结尾。
列如一些常见的语句:
#include<stdio.h>
int main()
{
int count,sum; //声明 声明不是一条语句
count=0;//表达式语句
sum=0;//表达式语句
while(count++<20) //迭代语句
sum=sum+count;
printf("sum=%d\n",sum);//表达式语句
returna 0;//跳转语句
}
副作用和序列点
副作用:副作用是对数据对象或文件的修改。
- 列如:staes=50;他的副作用是将变量的值设置为50。从c语言的角度看,主要目的是对表达式求值。
- 对表达式求值的副作用就是把变量staes的值改为50.跟赋值运算符一样,自增、自减运算符也有副作用,使用他们的主要目的就是使其副作用
序列点:序列点是程序执行的点,在该点上,所有的副作用都在进入下一步之前发生。
- c语言中,语句的分号标记了一个序列点。意思是,在一个语句中,赋值、自增、自减运算符对运算对象做的改变必须在程序执行下一条语句之前完成。
- 任何一个完整条件表达式的结束都是一个序列点
完整表达式:是指这个表达式不是另一个更大表达式的子表达式
- 例如:
#include<stdio.h>
int main()
{
int a=9;
while(a++<10)
printf("%d",a);
return 0;
}
10
对于a++的"先使用,在递增",常见的误区可能是,printf()先使用a的值之后在递增。但是a++<10是一个完整表达式,该表达式的结束就是一个序列点,所以程序在进入printf()之前就已经发生副作用,a已经递增。同时,使用后缀形式保证了a与10比较之后才进行递增
复合语句(块)
复合语句是用花括号括起来的一条或多条语句,复合语句也称为块。
列如:
index=0;
while(index++<10)
sam=10*index+2;
printf("sam=%d\n",sam);
index=0;
while(index++<10){
sam=10*index+2;
printf("sam=%d\n",sam);
}
- 第一段程序:while循环只有一条赋值语句,可以不使用花括号。循环结束后,printf()函数只会被调用一次
- 第二段程序:花括号确保两条语句都是while循环的一部分,每执行一次就会调用一次printf()函数。整个复合语句被视为一条语句。