C语言中副作用和序列点(关于自增自减)

本文介绍了C语言中副作用的概念,即对数据对象或文件的修改,并通过例子解释了自增自减运算符可能带来的复杂性。同时,文章讲解了序列点的重要性,它确保在序列点处所有副作用已完成。完整表达式是序列点讨论的一部分,包括语句分号和运算符后的表达式结尾。
摘要由CSDN通过智能技术生成

自增自减运算符很常见,先后关系大家一定都知道,但是在某些情况下可能会变的有些复杂,这对于初学者造成很大困扰,《C primer plus》一书中“副作用和序列点”这一节比较清晰的说明了特殊情况的运算顺序。

副作用:

C语言中副作用就是对数据对象或文件的修改。从C语言的角度上来看,它的主要目的是对表达式求值,至于赋值,修改这些对于我们来说的主要目的在C语言来看都是副作用。

例如,

调用printf函数,它的主要目的就是返回值。而在控制台显示是他的副作用。

对于a = 1;这条语句,它的主要目的也就是对该表达式求值,求出是1。至于将1赋值给a则是副作用。

我的看法是将语句和自定义的函数类比,函数体内我们实现各种功能,最后返回一个值,这个返回的值就是主要目的,其余的实现的功能就是副作用。(这句纯粹自己的理解)

序列点:

序列点是程序执行的点,在该点上所有的副作用都要在进入下一步之前完成。

C语言中,语句的分号标记了一个序列点。任何一个完整的表达式的结束也是一个序列点。还有一些运算符也有序列点。

推荐一篇博客《C语言中的序列点》

什么是完整表达式呢?

所谓完整表达式,就是指这个表达式不是另一个更大表达式的子表达式。例如,表达式语句中的表达式和while循环中作为测试的表达式都是完整表达式。

所以:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值