如下C++程序
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)函数调用入栈顺序依次是: 右边参数-->左边参数-->函数返回地址
栈的增长方向即栈中元素增加的方向,从高地址向着低地址元素不断增加,则栈底在高地址处,栈顶在低地址处!!!