一个C语言程序说明了实参到形参的传递过程(2)
来源:互联网 发布:ip地址显示在阿里云 编辑:程序博客网 时间:2024/05/16 09:07
这里继续上次的思路,从汇编语言里具体了解下实参到形参的传递过程,我这里使用的是VS2010编译器,将此程序反编译后一步步跟踪程序的运行过程。下面还是先贴出这个程序的源代码(运行结果在注释出或者上一篇文章):
#include <stdio.h>int func(int a,int b){printf("%d,%d\n",a,b); int c; c=a+b; return c;}int main(void){ int x=6,r; r=func(x++,x++);//7,6 printf("%d\n",x);//8 printf("%d\n\n",r);//13 x = 6; r=func(x++,++x);//7,8 printf("%d\n",x);//8 printf("%d\n\n",r);//15 x = 6; r=func(++x,++x);//8,8 printf("%d\n",x);//8 printf("%d\n\n",r);//16 x = 6; r=func(++x,x++);//8,6 printf("%d\n",x);//8 printf("%d\n\n",r);//14}
下面以一组图片的形式说明,图片中只跟踪了一次参数传递的过程。
图片1:直接找到程序的入口点,此时没有运行一条指令,堆栈、代码与数据段由操作系统分配,此时的esp=002EFAF0,指向的栈顶也是由操作系统分配的,main函数结束运行后会把返回值传递给操作系统,同时释放这个程序的堆栈、代码和数据所占用的内存空间。
图2:紧接着上图运行,首先创建main函数的堆栈框架
图片3:把main函数中使用的一些通用寄存器入栈
图片4:
图片5:
图片6:
图片7:
图片8:
图片9:
图片10:
图片11:
- 一个C语言程序说明了实参到形参的传递过程(2)
- 一个C语言程序说明了实参到形参的传递过程(1)
- C语言-实参到函数形参传递的理解
- 一个C语言程序的编译过程
- C语言中函数传递(实参 形参)
- C语言中函数传递(实参 形参)
- c语言的一个问题 -关于怎么能改变实参
- C语言函数传递中形参的变化不会改变实参的值
- 使用c语言完成了一个求素数的程序
- C语言程序从高级语言到二进制的程序经过了哪些过程
- <C语言>函数作实参传递给另一函数
- c语言指针传递说明
- C语言学习笔记(2)形参和实参
- C语言----函数的形参与实参
- c语言中形参和实参的区别
- c语言中形参和实参的关系
- c语言中形参和实参的区别?
- 函数中实参到形参的传递
- 路径下文件遍历
- 最小堆(小根堆)
- Android手机分辨率基础知识(DPI,DIP计算)
- 进程切换时机
- 【算法题】打印二元查找树中元素和等于指定数的所有路径
- 一个C语言程序说明了实参到形参的传递过程(2)
- 坑爹的 wyArray
- HttpServletResponse应用
- 什么是汉明窗?加Hanmming窗的作用?
- java面试题经典20例【第二季_常瑞鹏】
- [转载]Android - 文件读写操作
- 《为了看看阳光,我来到这世上》
- leetcode - Palindrome Partitioning II
- java 操作Excel文件一些感悟(内存溢出)