关于a++和++a
来源:互联网 发布:java基础代码的编写 编辑:程序博客网 时间:2024/06/04 19:33
#include <stdio.h>int main(){int a,b;a = 4;a += (a++);printf("%d\n",a);//96: a = 4;0040D7B8 mov dword ptr [ebp-4],47: a += (a++);0040D7BF mov eax,dword ptr [ebp-4]0040D7C2 add eax,dword ptr [ebp-4]0040D7C5 mov dword ptr [ebp-4],eax0040D7C8 mov ecx,dword ptr [ebp-4]0040D7CB add ecx,10040D7CE mov dword ptr [ebp-4],ecxa = 4;a += (++a);printf("%d\n",a);//1010: a = 4;0040D7E2 mov dword ptr [ebp-4],411: a += (++a);0040D7E9 mov eax,dword ptr [ebp-4]0040D7EC add eax,10040D7EF mov dword ptr [ebp-4],eax0040D7F2 mov ecx,dword ptr [ebp-4]0040D7F5 add ecx,dword ptr [ebp-4]0040D7F8 mov dword ptr [ebp-4],ecxa = 4;//(a++) += a;//compile errorprintf("%d\n",a);//4a = 4;(++a) += (a++);printf("%d\n",a);//1118: a = 4;0040D824 mov dword ptr [ebp-4],419: (++a) += (a++);0040D82B mov ecx,dword ptr [ebp-4]0040D82E add ecx,10040D831 mov dword ptr [ebp-4],ecx0040D834 mov edx,dword ptr [ebp-4]0040D837 add edx,dword ptr [ebp-4]0040D83A mov dword ptr [ebp-4],edx0040D83D mov eax,dword ptr [ebp-4]0040D840 add eax,10040D843 mov dword ptr [ebp-4],eaxa = 4;(++a) += a;printf("%d\n",a);//1022: a = 4;0040D857 mov dword ptr [ebp-4],423: (++a) += a;0040D85E mov edx,dword ptr [ebp-4]0040D861 add edx,10040D864 mov dword ptr [ebp-4],edx0040D867 mov eax,dword ptr [ebp-4]0040D86A add eax,dword ptr [ebp-4]0040D86D mov dword ptr [ebp-4],eaxa = 4;a = (a++) + (a++);printf("%d\n",a);//1027: a = 4;0040D881 mov dword ptr [ebp-4],428: a = (a++) + (a++);0040D888 mov edx,dword ptr [ebp-4]0040D88B add edx,dword ptr [ebp-4]0040D88E mov dword ptr [ebp-4],edx0040D891 mov eax,dword ptr [ebp-4]0040D894 add eax,10040D897 mov dword ptr [ebp-4],eax0040D89A mov ecx,dword ptr [ebp-4]0040D89D add ecx,10040D8A0 mov dword ptr [ebp-4],ecxa = 4;b = (a++) + (a++);printf("%d\n",b);//831: a = 4;0040D8B4 mov dword ptr [ebp-4],432: b = (a++) + (a++);0040D8BB mov eax,dword ptr [ebp-4]0040D8BE add eax,dword ptr [ebp-4]0040D8C1 mov dword ptr [ebp-8],eax0040D8C4 mov ecx,dword ptr [ebp-4]0040D8C7 add ecx,10040D8CA mov dword ptr [ebp-4],ecx0040D8CD mov edx,dword ptr [ebp-4]0040D8D0 add edx,10040D8D3 mov dword ptr [ebp-4],edxreturn 0;}
=================感谢百度知道的注册用户Eternal_BSM===============================
其实这是一个很深邃的问题。在c/c++中规定:左操作数必须是一个左值。a++在c/c++中的实现是:{int tmp=a;a=a+1;return tmp;}这里的tmp为一个临时变量,是一个右值,对它赋值毫无意义。++a在c/c++中的实现是:{a=a+1;return a;}a为一个左值,可以赋值。就效率而言++a应比a++的效率要高,因为a++要产生临时变量。建议lz在网上找一些左值和右值的知识来看看,这也不是一两句话讲清的,理解这个对你有很大的帮助。
- 关于a++和++a
- 关于 ( ++a )和( a++ )
- 关于 a-- 和 --a
- 关于a++和++a
- 关于a++和++a
- 关于a++ 和++a;
- 关于 (++a)+(++a)+(++a) 和 (a++)+(a++)+(a++) 问题
- 关于void a;和void *a;
- 关于++a和a++的区别
- 关于a++和++a的区别,理解
- 关于&a和a (a为数组名)
- 关于(int&)a和mencpy
- 关于数组&a a
- 关于(++a)+(++a)
- 关于a ++ 与 ++a
- 关于++(a++)
- 关于<A href="网址"> </A>和<A href="网址" target=_blank> </A>
- 关于数组a[3] 和3[a]的问题
- 正则表达式
- HDU 4415 Assassin’s Creed
- 操作系统的发展
- Linux常用命令之grep
- 好东西,JEECG 是一款基于代码生成器的J2EE智能开发平台!
- 关于a++和++a
- Python中的lambda
- eclipse如何导入没有.project文件的Android项目
- 小妞会装机 -- 一个装机软件的开发笔记(七)
- Java打印charArray.toString()
- poj 1125 股市的流言 改用dij方法 做
- VC中控件处理回车键
- mysql的三种安装方式
- 孔浩HTML,CSS笔记,心得(第二天)