c-自增或自减变量加减运算结束后结果为什么还要再进行一次自增或自减?

问题描述

自增或自减变量加减运算结束后结果为什么还要再进行一次自增或自减?
<?php
$a = 10;
$b = ($a++) + (++$a);
echo $b;
?>
结果是 22

为什么呀

解决方案

http://www.guokr.com/blog/471312/

这种问题可以不用再讨论了。

解决方案二:

第三行的($a++) 本身是10,但如果只是这样的话打印的结果也为10(先运算再自增的),首先假设C=B+(A++),B首先看到的是A本身,因为运算式还没结束,那么它还会向后面找,再次碰见的是++,如果我们只是打印A本身的值是不会变的,但如果要打印C的值,A要进行自增后才是整个运算式C的值。
其次++a,表示先自增再运算,首先看到的是让a自增一次再计算运算式的表达式,但如果++a,单单要打印a值的话是要+1才能得出结果的,这就是2者区别,所以这个表达式的结果为22是对的

解决方案三:

++运算符看成operator 函数我觉得好理解些
后置++返回值是原值但是本身做了+1操作
前置++返回值和本身都是原值+1
先执行a++ 这时返回值是a原值但是a本身做了+1操作也就会说+号左面的值是10但是由于后置++的存在a=11了当执行前置++时a+=1返回值是12
所以就是10+12

解决方案四:

php 与 c 或 c++ 对这个问题的处理完全不一样。

c 或 c++ 里这是一个未定义行为,程序是错误的。php 的不知道,去查 php 的文档吧。

解决方案五:

这个问题,真不想解释

时间: 2024-08-31 11:50:46

c-自增或自减变量加减运算结束后结果为什么还要再进行一次自增或自减?的相关文章

Linux环境变量加载的研究

我们经常遇到在linux执行某条命令时出现xxx文件没找到的问题.很多情况都不是库没有安装,而是环境变量的错误. 但是,我明明是设置了环境变量啊.所以,我对此进行了试验. 我们登录linux有很多种,bash来交互式执行,或者直接非交互式执行命令.在我的试验后,发现,原来这几个的环境变量加载都是不同的. 相关文件: 从电脑上,我找到这么几个相关文件. 1 /etc/profile 2 /etc/environment 3 /etc/bashrc 4 ~/.bash_profile 5 ~/.ba

一共有12个月,滑动到12月,再往右滑动,将年份加一,滑到1月,再往左滑,将年份减1

问题描述 一共有12个月,滑动到12月,再往右滑动,将年份加一,滑到1月,再往左滑,将年份减1 这个效果怎么做,一共有12个月,滑动到12月,再往右滑动,将年份加一,滑到1月,再往左滑,将年份减1 解决方案 使用自定义view进行啊!具体,你可以参照一些博客,我的博客也有,只不过效果不跟这个一样 解决方案二: 如何自定义View呢? 解决方案三: 可以去找个插件,,实现这个效果

如何给存储过程的变量加单引号

问题描述 如何给存储过程的变量加单引号 ALTER PROCEDURE [dbo].[FM_GuestBookRead] @TableName Nvarchar(50), @PostIp varchar(100) AS BEGIN Declare @strSQL Nvarchar(200) Set @strSQL='Select PostDate from '+ @TableName +' where postip='''+@PostIp+'' Execute(@strSQL) END 想要给p

access数据库-VC++ mfc连接odbc数据库后,不能对数据库的记录更新(增删改),只能查寻是什么原因?

问题描述 VC++ mfc连接odbc数据库后,不能对数据库的记录更新(增删改),只能查寻是什么原因? 下面是一段插入的代码,不能插入,在第二个str.Format()时出现FROM子句出错. 我在执行查询时是成功的. void CINPUT::OnTianjia() { // TODO: Add your control notification handler code here UpdateData(TRUE); if(m_No.IsEmpty() || m_name.IsEmpty()

javascript-jsp页面加载JS文件后页面空白

问题描述 jsp页面加载JS文件后页面空白 jsp页面加载js文件后页面空白 但是在浏览器的调试工具里面显示js文件已经加载进去了! 而且还能看到js文件的内容 但是jsp页面却是一片空白!在不加载js文件就没什么问题页面也能正常显示求大神指点! 解决方案 是不是调用了document.write什么的了导致覆盖了当前页面内容 解决方案二: 打开谷歌浏览器,看看console,报什么 错了,有可能哪个js文件 里有变量用错了之类的 解决方案三: 解决方案四: 引用文件路径及文件名称 参数格式之类

加装固态硬盘后如何转移系统到固态硬盘

  加装固态硬盘后如何转移系统到固态硬盘 系统迁移到SSD固态硬盘教程 换SSD固态硬盘安装系统其实有非常简单的办法,在分区助手升级5.5之后,就再一次更新和增强了这个功能,打开最新版的分区助手专业版,运行. 软件名称:分区助手专业版V5.5 免费版 点击左侧的"迁移OS到SSD/HDD"功能. 之后就会看到向导了,一步步跟着走吧! 找到我们那块SSD固态硬盘. 支持调整大小,修改盘符,等等. 点击下一步,就自定开始了.就这么简单,没有多余的复杂选项.全自动替代我们搞定一切需要手动干预

JS 为什么调试单步运行成功而直接运行失败?并且加了个alert后就能直接运行成功

问题描述 JS 为什么调试单步运行成功而直接运行失败?并且加了个alert后就能直接运行成功 RT 有2个在同一页面的js文件,我是在一个js文件的for循环内逐个调用另一个js 文件的画布数组,然后在for内用drawImage把图画出来,但是程序运行失败,错误是没得到画布.可是如果用调试在获取画布的语句前设断点再单步运行的话能够成功,或者是在获取画布的语句前设个alert之后直接运行就能成功,求问为什么啊!! 解决方案 这是延时问题!你需要加一个setTimeout方法即可解决问题! 解决方

调用动态链接库 构造其中类,成员变量vector,构造函数执行后刚构造的对象中成员变量全是乱码

问题描述 调用动态链接库 构造其中类,成员变量vector,构造函数执行后刚构造的对象中成员变量全是乱码 如题 VS2010 c++调用动态链接库 调试发现 构造动态链接库中类的时候,其中的成员变量vector 没问题,一旦构造函数执行后返回主程序,则刚构造的对象中成员变量全是乱码? 解决方案 类的成员对象变量何时构造 解决方案二: 不会,是不是你程序自身的问题? 解决方案三: 额,程序以前都调通了.这种情况以前出现过一次,我忘记了是怎么弄的了. 解决方案四: 代码那个地方有问题吧,仔细检查下

javascript-Qt加载dll文件后在JavaScript中无法使用

问题描述 Qt加载dll文件后在JavaScript中无法使用 实现目的:在Qt加载dll文件,dl文件实现提示框功能,dll文件的类为Operator,加载后作用js的一个属性被js使用. 问题:在js中就不能成功调用,并提示: Uncaught exception at :/test.js:6: TypeError: Result of expression 'Operator.prompt' [undefined] is not a function. 尝试在main.cpp中调用这个类的