自增自减详解

在VC下的几个例子: 

int i=3;

int j=4,k;

k = ++i * j++;

//k = i*j++此时i值为4

//k = i * j;//此时j值为4;

//k = 16;

//j = 5;

printf("%d %d %d\n",i, j, k);

输出结果为 4 5 16

解释:  ++i为滞前自增,先将i值加1在用其参加运算,故第一步i的值为4;

j++为滞后自增,待表达式所有的运算符全部运行完在将j加1

于是k=16;j=5;

i = 3;

j = (i++) + (i++) + (i++);

上述可等于下列语句:

j = i + i + i;

i++;

i++;

i++;

最后 i=6;j=9;

i = 3;

j = (++i) + (++i) + (++i);

过程: j = i + (++i) + (++i);此时i值为4

j = i + i + (++i);此时i的值为5,此事从左开始的运算符分别为 + + (++)前两个的运算符优先级相同,所以先运算第一个(左边的)

j = 10 + (++i);

j =10 + 6 = 16;

结果:j = 16; i = 6;

i = 3;

j = (++i) + (++i) * (++i);

上述语句的运算过程可以等价如下:

j = i + (++i)*(++i);//此时i的值为4

j = i + i * (++i);//此时i的值为5

j = i + i * i;//此时i的值为6

j = 6 + 6 * 6 = 42;

i = 3;

printf("%d %d \n", i ,(i++)+(i++)+(i++));

printf("i = %d\n",i);

输出结果为:

3 9

i = 6

C语言中函数的参数从右到左依次被调用入栈,所以第一次输出的结果为 3 6

等到printf()函数调用完成后执行i++操作,连续执行三次,得到的结果为6

总结:

  1. 在一个表达式中,出现对同一变量的多次赋值运算,对于不同的c编译系统,将遵循不同的标准
  2. 由于上述的事实,所以编程者极力避免上述运算
  3. C语言系统,对于函数调用的多个参数,其处理顺序是:自右向左
时间: 2024-11-04 22:55:28

自增自减详解的相关文章

OAF_OAF EO系列增删改 - Delete详解和实现(案例)

2014-06-14 BaoXinjian 一.摘要 在OAF中,似乎不是根据你光标所在的行来删除对应的记录,而是根据记录指针来删除,而这个指针又与你的光标位置无关需要用代码来精确的定位.因此我们在删除记录时,需要编写一定的代码来实现. User’s Guide中提供了一种标准的删除方法,通过在在当前记录集中用指针进行循环来定位需要删除的记录(例子提供的是只删一条). 不管如何删除,总的实现思路如下: Step1. 首先给需要删除的记录做标记:  要么打勾选上,要么在行上放个图标按钮来点火,总之

sed 增删改查详解以及 sed -i原理

我为什么要详细记录sed命令: sed 擅长取行.工作中三剑客使用频率最高,本篇文章将对sed命令常用的 增,删,改,查 进行详细讲解,以备以后工作中遗忘了查询,sed命令是作为运维人员来说,必须必掌握的技能 如果三剑客你不会,那么你不用做运维了. sed简介: 是一种流编辑器,它是文本处理中非常中的工具,能够完美的配合正则表达式使用,功能不同凡响.处理 时,把当前处理的行存储在临时缓冲区中,称为"模式空间"(pattern space),接着用sed命令处理缓 冲区中的内容,处理完成

iOS CoreData 增删改查详解

最近在学习CoreData, 因为项目开发中需要,特意学习和整理了一下,整理出来方便以后使用和同行借鉴.目前开发使用的Swift语言开发的项目.所以整理出来的是Swift版本,OC我就放弃了. 虽然Swift3 已经有了,目前整理的这个版本是Swift2 的.Swift 3 的话有些新特性. 需要另外调整,后续有时间再整理. 继承CoreData有两种方式: 创建项目时集成 这种方式是自动继承在AppDelegate里面,调用的使用需要通过UIApplication的方式来获取AppDelega

Twitter-Snowflake,64位自增ID算法详解

Twitter-Snowflake算法产生的背景相当简单,为了满足Twitter每秒上万条消息的请求,每条消息都必须分配一条唯一的id,这些id还需要一些大致的顺序(方便客户端排序),并且在分布式系统中不同机器产生的id必须不同. snowflake把时间戳,工作机器id,序列号组合在一起. 除了最高位bit标记为不可用以外,其余三组bit占位均可浮动,看具体的业务需求而定.以下关于此算法的可行性研究 Console.WriteLine("41bit的时间戳可以支持该算法使用年限:{0}&quo

sed增删改查详解以及sed -i原理

我为什么要详细记录sed命令: sed擅长取行.工作中三剑客使用频率最高,本篇文章将对sed命令常用的增,删,改,查进行详细讲解,以备以后工作中遗忘了查询,sed命令是作为运维人员来说,必须必掌握的技能.如果三剑客你不会,那么你不用做运维了. sed简介: 是一种流编辑器,它是文本处理中非常中的工具,能够完美的配合正则表达式使用,功能不同凡响.处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送

Yii2.0数据库操作增删改查详解

1.简单查询: one(): 根据查询结果返回查询的第一条记录. all(): 根据查询结果返回所有记录. count(): 返回记录的数量. sum(): 返回指定列的总数. average(): 返回指定列的平均值. min(): 返回指定列的最小值. max(): 返回指定列的最大值. scalar(): 返回查询结果的第一行中的第一列的值. column(): 返回查询结果中的第一列的值. exists(): 返回一个值,该值指示查询结果是否有数据. where(): 添加查询条件 wi

SSH登录与增删改查demo详解+源代码

点击下载,测试绝对可用SSH整合框架登录加增删改查demo 下载地址:http://download.csdn.net/detail/qq_33599520/9784679   一.框架概述 spring+Struts2+hibernate(SSH)整合框架是一种非常典型与实用的Web项目MVC架构,其中: Spring主要通过控制反转(IOC)与依赖注入(DI)控制对象的创建与维护,与实现面向切片编程(AOP),核心配置文件为:applicationContext.xml. Struts2是M

HP电脑的增霸卡功能操作详解

机房管理中HP电脑的增霸卡功能操作详解 一.软件去除保护 1).电脑开机后等待进入增霸卡选择系统界面: 2).按F1帮助,F10进入增霸卡BIOS界面: 3).光标切换到>>>系统还原模式,模式有:(不保护.每次.周.月.),选择不保护:(如果第四步可操作,则省略这一步操作) 4).光标切换到>>>磁盘工具,选择要进行操作的系统的启动盘,选择保护模式,模式有:(保护.不保护),选择"不保护":(如果保护模式不可操作,则进行第三步操作) 5).保存,重

Swift流程控制之循环语句和判断语句详解

Swift提供了所有c类语言的控制流结构.包括for和while循环来执行一个任务多次:if和switch语句来执行确定的条件下不同的分支的代码:break和continue关键字能将运行流程转到你代码的另一个点上. 除了C语言传统的for-condition-increment循环,Swift加入了for-in循环,能更加容易的遍历arrays, dictionaries, ranges, strings等其他序列类型. Swift的switch语句也比C语言的要强大很多. Swift中swi