目录
一.表达式
二.语句
三.副作用和序列点
一.表达式
由运算符和运算对象组合。最简单得表达式是一个单独的运算对象,以次为基础可以建立复杂的表达式
4
4+21
a*(b + c/d)/20
运算对象可以是常量,变量或二者得组合。一些表达式由子表达式组成(子表达式既较小的表达式)
c/d是上面例子中a*(b+c/d)/20得子表达式
C表达式得一个最重要得特性是,每个表达式都有一个值,要获得这个值,必须根据运算符优先级规定得顺序来执行操作
Q = 5*2作为一个整体得值是10
q>3因为是关系表达式不是0就是1(表达式值为1,条件为假,表达式值为0)
二.语句
语句是C程序得进本构建块。一条语句相当于一条完整得计算机指令
legs=4是一个表达式
legs=4;是一个语句
;是一个空语句
语句可以改变值或调用函数
复合语句:用花括号括起来得一条或多条语句,复合语句也称为块。
三.副作用和序列点
副作用:副作用是对数据对象或文件得修改
States = 50;
这个语句得副作用是将变量得值设置为50,而语句的主要目的其实是求值50(因为每个表达式都有一个值)。或states = 50 + 20;语句的主要目的是求50+20=70。而把states内存地址上的值修改为70就属于该语句的副作用了。
序列点:程序执行的点,在该点上,所有的副作用都在进入下一步之前发生。语句中的分号就是一个序列点。换个角度来说,在一个语句中,赋值运算符,递增运算符和递减运算符对运算对象左的改变必须在程序执行下一条语句之前完成。另外,完整表达式的结束也是一个序列点。
完整表达式,这个表达式不是另一个更大表达式的子表达式。
比如while(a++) 这里面的(a++)就属于完整表达式,它会在表达式结束后让a++自增。
下面我们来看个例子来深度了解下。
来看这个例子
nextnum = (y + n++) * 6;
这里最容易产生误会的点就在n++自增上,我们上面说过,副作用只能在序列点或完整表达式后尝试,而我们注意看(y + n++)属于 (y + n++) * 6的子表达式所以不是完整表达式,这就意味着n的自增只会发生在;后,而结果的确也是这样。
一般遇到这种容易尝试误解的表达式,最好的方式就是拆开。
nextnum = (y + n++) * 6;
等于
nextnum = (y + n) * 6;
n++;
在看这个例子
在这里例子当中,
(1 + n++) + n;其实等于1+3+3为7。n得自增只有等到(1 + n++) + n完整表达式结束才能完成
好了朋友们我们今天的内容到这就结束了,今天的内容到这里就结束了,如果有啥不会的朋友记得论坛里面提问哈~
如果朋友你感觉文章的内容对你有帮助,可以点赞,关注文章和专栏以及关注我哈,嘿嘿嘿我会定期更新文章的,谢谢朋友你的支持哈