函数调用时的参数传递和栈帧结构问题
2017-04-20 10:53
274 查看
如下C++程序
请问刚进入func函数时,参数在栈中的形式可能为 (左侧为地址,右侧为数据)
答案是D。
栈的增长方向即栈中元素增加的方向,从高地址向着低地址元素不断增加,则栈底在高地址处,栈顶在低地址处!!!
int i=0x22222222; char szTest[]=”aaaa”; //a的ascii码为0x61 func(I, szTest); //函数原型为void func(int a,char *sz);
请问刚进入func函数时,参数在栈中的形式可能为 (左侧为地址,右侧为数据)
A. 0x0013FCF0 0x61616161 0x0013FCF4 0x22222222 0x0013FCF8 0x00000000 B. 0x0013FCF0 0x22222222 0x0013FCF4 0x0013FCF8 0x0013FCF8 0x61616161 C. 0x0013FCF0 0x22222222 0x0013FCF4 0x61616161 0x0013FCF8 0x00000000 D. 0x0013FCF0 0x0013FCF8 //函数地址 0x0013FCF4 0x22222222 //左边参数 0x0013FCF8 0x61616161 //右边参数
答案是D。
(1)对于x86系统,栈的增长方向是从高地址到低地址 (2)函数调用时,首先参数压栈,参数的入栈顺序是从右向左;最后压入函数地址 (3)函数调用入栈顺序依次是: 右边参数-->左边参数-->函数返回地址
栈的增长方向即栈中元素增加的方向,从高地址向着低地址元素不断增加,则栈底在高地址处,栈顶在低地址处!!!
相关文章推荐
- 函数传递的时候参数传递和栈帧结构
- 浅谈C语言中的函数调用方式-----栈帧结构
- 数据结构基础(6)--递归和函数调用--汉诺塔问题C语言实现
- 函数调用中的栈帧问题
- 函数的调用过程(栈帧结构)—C语言版
- 函数调用时的栈帧结构以及临时变量的深入研究
- IA32的栈帧结构和函数调用过程
- 函数调用入栈基本步骤(感觉和进程的栈帧结构一块看会比较容易理解)
- 关于在C/C++语言中,函数如何返回数组,数组如何作为参数传递以及返回数组的函数该如何调用问题的总结
- 函数调用入栈基本步骤(感觉和进程的栈帧结构一块看会比较容易理解)
- 函数调用入栈基本步骤(感觉和进程的栈帧结构一块看会比较容易理解)
- .net中前台javascript与后台c#函数相互调用问题
- 用内嵌汇编来解决运行时参数不确定的函数的调用问题
- .net中前台javascript与后台c#函数相互调用问题
- net中前台javascript与后台c#函数相互调用问题
- .net中前台javascript与后台c#函数相互调用问题
- 构造函数和析构函数中调用虚函数有什么问题?
- .net中前台javascript与后台c#函数相互调用问题
- .net中前台javascript与后台c#函数相互调用问题
- net中前台javascript与后台c#函数相互调用问题