程序是怎么运行的

lvpinging 2005-11-29 09:40:51
RT....

主要是想知道在内存中的变化...谢谢拉
像这么一个程序
main()
{
int i=0;
int a=i++;
printf("%d",a);



}

在VC6.0下怎么运行的

内存分配空间之类的都讲讲

i++什么时候完成+1操作啊...谢谢啊





...全文
169 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
fiftymetre 2005-11-30
  • 打赏
  • 举报
回复
NND就知道不是啊不是啊,我捶死你
xugang_2001 2005-11-29
  • 打赏
  • 举报
回复
呵呵,要编译原理的知识,很烦的
ma100 2005-11-29
  • 打赏
  • 举报
回复
不是啊..我是想知道...比方说i++;程序怎么判断什么时候进行+1操作啊
像一个函数a(i,i++){......}

是整个函数运行完了才进行+1操作呢..还是?

//////////////////////////

学习完编译原理就知道了
fiftymetre 2005-11-29
  • 打赏
  • 举报
回复
存在i++的表达式,在表达式结束以后求值

a(i, i++);
==>
a(i, i);
i++;
lvpinging 2005-11-29
  • 打赏
  • 举报
回复
不是啊..我是想知道...比方说i++;程序怎么判断什么时候进行+1操作啊
像一个函数a(i,i++){......}

是整个函数运行完了才进行+1操作呢..还是?


fiftymetre 2005-11-29
  • 打赏
  • 举报
回复
汇编如下:

42: int main()
43: {
0040B800 push ebp
0040B801 mov ebp,esp
0040B803 sub esp,48h
0040B806 push ebx
0040B807 push esi
0040B808 push edi
0040B809 lea edi,[ebp-48h]
0040B80C mov ecx,12h
0040B811 mov eax,0CCCCCCCCh
0040B816 rep stos dword ptr [edi]
44: int i=0;
0040B818 mov dword ptr [ebp-4],0
45: int a=i++;
0040B81F mov eax,dword ptr [ebp-4]
0040B822 mov dword ptr [ebp-8],eax
0040B825 mov ecx,dword ptr [ebp-4]
0040B828 add ecx,1
0040B82B mov dword ptr [ebp-4],ecx
46: printf("%d",a);
0040B82E mov edx,dword ptr [ebp-8]
0040B831 push edx
0040B832 push offset string "%d" (00489040)
0040B837 call printf (00417e00)
0040B83C add esp,8
47:
48: return 0;
0040B83F xor eax,eax
49:
50: }

进入函数后首先为函数分配了48h的栈空间用来存放临时变量

0040B801 mov ebp,esp
0040B803 sub esp,48h

这部分栈内存被初始化为0xcccccccc

0040B809 lea edi,[ebp-48h]
0040B80C mov ecx,12h
0040B811 mov eax,0CCCCCCCCh
0040B816 rep stos dword ptr [edi]

int a=i++;
通过代码可以看到,先把i赋给a

0040B81F mov eax,dword ptr [ebp-4]
0040B822 mov dword ptr [ebp-8],eax

然后再执行i++

0040B825 mov ecx,dword ptr [ebp-4]
0040B828 add ecx,1
0040B82B mov dword ptr [ebp-4],ecx
ma100 2005-11-29
  • 打赏
  • 举报
回复
学习汇编语言后就知道了

69,368

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧