在c语言下,关于自加运算符的问题

问题描述

在c语言下,关于自加运算符的问题

int a=1, b;
b=(a++)+2+a;

求b的值?是4还是5?
请问是先把整个第二条语句运算完后,a再加1,还是执行完a+2后,a就加1?

解决方案

b=(a++)+2+a;
这行代码执行顺序是
b = a;
a++;
b = b+2+a;
所以是 b= 1+2+2=5;

解决方案二:

用VC++6.0实测最终结果为4。
a++,先引用,再自加,
b=1 + 2 + 1;
接着a++;

如果将后面的a也改成(a++),结果依然是4.
看下面例子:

先执行两次a++;
在用a的值替换表达式中的a
即b=5+5+2
这应该属于未定义行为,就是根据编译器的不同,结果可能不同(我用的是VC++6.0 ,你可以使用VS实测一下)
http://www.guokr.com/blog/471312/
所以尽可能的避免这种容易引起混乱的写法

解决方案三:

解决C语言自加的问题:(a++)*(++a)*(a++)*(++a);
关于c语言自加运算的问题(a++)

C语言运算符

解决方案四:

1+2+2=5;
a++和++a的区别在于谁在前

解决方案五:

程序是按照步骤来的,如果是a++的话,在那一行代码中,a的值是不变的,下一行才发生变化,++a则是在那一行已经发生了变化。
所以执行的顺序是
b=a=1
a++ //此时a的值变为2
b=b+2+a=5

解决方案六:

标准的未定义行为----------------------字数补全大法

解决方案七:

若是a++,就是计算分号式值,完了再a++,所以b=4后a=3

时间: 2024-12-21 19:24:46

在c语言下,关于自加运算符的问题的相关文章

浏览器环境下JavaScript脚本加载与执行探析之defer与async特性_javascript技巧

defer和async特性相信是很多JavaScript开发者"熟悉而又不熟悉"的两个特性,从字面上来看,二者的功能很好理解,分别是"延迟脚本"和"异步脚本"的作用.然而,以defer为例,一些细节问题可能开发者却并不一定熟悉,比如:有了defer特性的脚本会延迟到什么时候执行:内部脚本和外部脚本是不是都能够支持defer:defer后的脚本除了会延迟执行之外,还有哪些特殊的地方等等.本文结合已有的一些文章以及MDN文档中对两个特性的阐述,对de

C语言位运算和sizeof运算符详解_C 语言

位运算和sizeof运算符       C语言中提供了一些运算符可以直接操作整数的位,称为位运算,因此位运算中的操作数都必须是整型的.位运算的效率是比较高的,而且位运算运用好的话会达到意想不到的效果.位运算主要有6种:与(&),或(|),取反(~),异或(^),左移(<<),右移(>>). 1.位运算中的类型转换       位运算都必须进行Integer Promotion.在进行运算之前,都必须将char型.short型的数据转换为int或者unsigned int型再

Vista下启动无加载项的IE浏览器的方法

Vista 下启动无加载项的IE浏览器的方法.IE在无加载的状态下可以判断浏览器是否由于加载了插件.恶意软件以及 ActiveX 控件等而引起了网页工作不正常.浏览器无法工作.软件冲突等问题. 具体步骤如下: (1)开始-〉所有程序-〉附件-〉系统工具-〉Internet Explorer(无加载项)(如图) 点击打开就是了. (2)启动了无加载的IE在下面会提示:如下图的内容(如图) (3)解决自己想解决的问题. (4)如果问题解决了重新启动,双击桌面上的IE即是我们平时使用的IE了.

Windows XP下IE浏览器加载项管理

什么是Internet Explorer加载项? Internet Explorer加载项是一些为了方便和有效的浏览而加载到浏览器上的组件.常见的加载项包括附加的工具条,动态鼠标指针,股市信息和广告拦截器(如3721的IE工具)等等. 加载项如何加载到你的计算机上的? 很多的加载项来自Internet.大多来自Internet的加载项在下载到你的计算机本地之前需要经过你的许可.但也有些会在你未知的情况下下载并加载.这通常是由于你允许了某个特定站点的所有下载,或者是由于这个加载项是某个你之前已经安

Android:下拉刷新+加载更多+滑动删除实例讲解_Android

         小伙伴们在逛淘宝或者是各种app上,都可以看到这样的功能,下拉刷新和加载更多以及滑动删除,刷新,指刷洗之后使之变新,比喻突破旧的而创造出新的,比如在手机上浏览新闻的时候,使用下拉刷新的功能,我们可以第一时间掌握最新消息,加载更多是什么nie,简单来说就是在网页上逛淘宝的时候,我们可以点击下一页来满足我们更多的需求,但是在手机端就不一样了,没有上下页,怎么办nie,方法总比困难多,细心的小伙伴可能会发现,在手机端中,有加载更多来满足我们的要求,其实加载更多也是分页的一种体现.小伙

C语言基础问题求解答,运算符

问题描述 C语言基础问题求解答,运算符 if((b[i]=='a')||(b[i]=='e')||(b[i]=='i')||(b[i]=='o')||(b[i]=='u')) 可以写成下面的形式吗? if(b[i]==('a'||'e'||'i'||'0'||'u')) 解决方案 不可以的,会先判断括号里面的.你用switch语句 解决方案二: 可以这么写 if (strstr("aeiou", b[i]) != null) ... 解决方案三: 参考http://blog.sina.

shell-linux下curl -b 加载 cookie 的问题求救

问题描述 linux下curl -b 加载 cookie 的问题求救 要加载的cookie文件: .e.test.cn TRUE / FALSE 1428635701 CRM_ADMIN %1B%A7h4z%A9_I%08%91%CAc%7D%18%1D%EB .test.cn TRUE / FALSE Q u%3D%25O5%25PR%25O4%25S0%25O5%25PR%25O4%25S0%25O7%25N2%25O7%25N2%25PO%25PQ%26n%3DCUC%25O1%25R0%

dnf游戏目录下tenslx.dll加载失败怎么办,dnf游戏目录下tenslx.dll加载失败解决办法

解决方案: dnf游戏目录下tenslx.dll加载失败怎么办?     1.使用游戏客户端自动维护功能.地下城与勇士游戏客户端文件如果被删除的话,会自动下载并更新的.因此,使用此功能,可顺利修复此问题:   2.在地下城与勇士的图标上右击,选择"属性",在"快捷方式"选项卡中单击"查找目标":   3.     4.在新打开的文件夹中搜索"tenslx",然后全选,选择"删除":   5.     6.

模块怎样加载-Linux下模块怎样 加载

问题描述 Linux下模块怎样 加载 我看了下/lib/modules/*/kernel/net/drive下有r8169.ko网卡驱动.可是不知道怎么加载到内核里面 解决方案 linux下网卡驱动安装全过程 转载,希望可以帮到你 好不容易有个时间研究Linux,便从同学那里拿了RH9的安装盘来装(后来听到有人说RH9已经很老了,现在都用FC.我倒是觉得用什么发行版都不是很重要,至少很多东西我都还没弄懂,追求版本似乎没什么意思).原本以为安装会像以往那样顺利,后来却发现网卡没有识别出来.也就是说