C语言中有个术语叫:副作用

副作用其实是对数据对象或文件的修改。(数据对象的定义是:用于存储值的数据存储区域)

例如语句 states = 50;

从C语言的角度来讲:这个赋值表达式的副作用是将变量的值设置为50;目的是对表达式求值;

但是使用赋值表达式的主要目的(真正目的)就是使用其副作用(将变量的值设置为50);

除此之外,递增、递减运算符也有副作用;我们使用它们其实主要目的是使用其副作用。即递增、递减的副作用;

例如printf()函数,我们使用它的目的是使用其副作用,其副作用是显示信息。它从C语言角度来说,目的是返回待显示字符的个数。

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

序列点:

是程序执行的点,所有的副作用都在进入下一步之前发生;

语句中的分号标记了序列点;

当然不一定要分号才表示序列点;

完整表达式的结束也是一个序列点

例如:

while (guests++<10)

  printf("%d \n",guests)

上面程序当中:guests++<10 就是一个完整的表达式,该表达式的结束也是一个序列点。

guests++<10的意思是guests先跟10比较(比较会得到布尔值True、False,这个过程是求值,也就是C语言角度来说的目的),再递增(把guests的值加1,即对数据对象或文件的修改,即副作用。这个副作用其实也是我们编写程序角度的主要目的。)。

guests简单概括就是先比较(求值)再递增。

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

完整表达式:

这个表达式不是另一个表达式的子表达式;

表达式语句中的表达式,循环条件的测试条件表达式,都是完整表达式。

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

补充一下表达式expression、语句statement的概念:

表达式:

表达式是由运算符和运算对象组成的。
运算对象是运算符操作的对象。
对简单的表达式是一个单独的运算对象。
表达式最重要的特性之一就是每个表达式都有一个值。
要获得这个值,必须根据运算优先级规定的顺序去操作。

语句

语句是C语言的基本构建块。
一条语句相当于一条完整的计算机指令。
在C中,大部分语句都以分号结尾。
最简单的语句是空语句
真正有效的语句是可以改变值或调用函数;

注意:语句和表达式不能划等号;
语句的分类:表达式语句、迭代语句、跳转语句、声明等。

声明创建了名称和类型,并为其分配内存空间和位置;

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

C语言中的副作用、序列点、完整表达式的更多相关文章

  1. c语言中的副作用!!千万小心!

    今天刚看完书上的副作用,博主觉得呢,副作用其实就在改变变量的值,也就是一个赋值操作!不过刚刚在知道上还是犯了错!!尴尬啊!! 大家都知道,c语言中的赋值操作符是自右向左结合的!! 下面有一个关于赋值中 ...

  2. java语言中的匿名类与lambda表达式介绍与总结 (Anonymous Classes and Lambda Expressions)

    2017/6/30 转载写明出处:http://www.cnblogs.com/daren-lin/p/anonymous-classes-and-lambda-expressions-in-java ...

  3. C语言中的序列点

    TAG: C, 序列点 DATE: 2013-08-07 序列点是程序执行序列中一些特殊的点. 当有序列点存在时,序列点前面的表达式必须求值完毕,并且副作用也已经发生, 才会计算序列点后面的表达式和其 ...

  4. C/C++ 语言中的表达式求值(原文作者:裘宗燕)

    经常可以在一些讨论组里看到下面的提问:“谁知道下面C语句给n赋什么值?”m = 1; n = m+++m++;最近有位不相识的朋友发email给我,问为什么在某个C++系统里,下面表达式打印出两个4, ...

  5. C/C++ 语言中的表达式求值

    在此,首先向裘老师致敬! 裘宗燕:C/C++ 语言中的表达式求值 经常可以在一些讨论组里看到下面的提问:“谁知道下面C语句给n赋什么值?” m = 1; n = m+++m++; 最近有位不相识的朋友 ...

  6. 在C语言中利用PCRE实现正则表达式

    1. PCRE简介 2. 正则表达式定义 3. PCRE正则表达式的定义 4. PCRE的函数简介 5. 使用PCRE在C语言中实现正则表达式的解析 6. PCRE函数在C语言中的使用小例子 1. P ...

  7. 2.C语言中的关键字

    1.auto 修饰局部变量,编译器默认所有局部变量都是用auto来修饰的,所以在程序中很少见到. 2.static 它作用可大了,除了可以修饰变量,还可以修饰函数,修饰变量,改变其作用域和生命周期,修 ...

  8. C语言中的宏定义

    目录(?)[-] 简单宏定义 带参数的宏 运算符 运算符 宏的通用属性 宏定义中圆括号 创建较长的宏 较长的宏中的逗号运算符 宏定义中的do-while循环do 空操作的定义 预定义宏 C语言中常用的 ...

  9. C语言中变量的存储类型

    在C语言中,对变量的存储类型说明有以下四种: auto 自动变量register   寄存器变量extern 外部变量static   静态变量 自动变量和寄存器变量属于动态存储方式,外部变量和静态变 ...

随机推荐

  1. mybaits中date类型显示时分秒(orcle数据库)

    <insert id="insert" parameterType="daSysLoginLog"> insert into DA_SYS_LOGI ...

  2. mysql show status 参数解析

    状态名 作用域 详细解释 Aborted_clients Global 由于客户端没有正确关闭连接导致客户端终止而中断的连接数 Aborted_connects Global 试图连接到MySQL服务 ...

  3. fluent仿真数值错误

  4. gym - 101673I Twenty Four, Again (表达式树枚举)

    题意及思路 模拟场上用一般方法枚举非常麻烦,一个小时没写出来,还是自己太菜了...用表达式树枚举有一个好处,判断需不需要加括号非常方便,只有当前节点运算符的优先级高于子节点的时候,才需要给子节点加一个 ...

  5. JS中的数组排序函数sort()

    JavaScript实现多维数组.对象数组排序,其实用的就是原生的sort()方法,用于对数组的元素进行排序. sort() 方法用于对数组的元素进行排序.语法如下: arrayObject.sort ...

  6. Vue02 样式的动态绑定

    daigengxin......2018-3-8 21:09:18 跟angular2类似,分为CSS类绑定和Style样式绑定两种方式,详情参见

  7. 通过iOS中的按钮来触发html文件中按钮所触发的函数

    html文件的代码 <!DOCTYPE html> <html> <head> <title>标题</title> </head> ...

  8. VMware内部错误解决办法

    虚拟机内部错误,不要担心不是致命错误,往往是由于你的配置被禁用了或者VMware运行权限不够导致 检查你的VMware虚拟网卡是否被禁用 检查你的VMware的运行权限,直接管理员运行就够够的了

  9. pthread多线程编程

    http://blog.csdn.net/onlyou930/article/details/6755593 http://blog.csdn.net/ithomer/article/details/ ...

  10. Luogu 3008 [USACO11JAN]道路和飞机Roads and Planes

    BZOJ2200 听说加上slf优化的spfa的卡过,真的不想写这些东西. 考虑使用堆优化的dij算法. 先加上所有双向边,然后dfs一下搜出所有由双向边构成的联通块,然后加上所有的单向边,一边对所有 ...