函数参数入栈顺序
#include
void foo(int x, int y, int z)
{
printf("x = %d at [%X]\n", x, &x);
printf("y = %d at [%X]\n", y, &y);
printf("z = %d at [%X]\n", z, &z);
}
int main(int argc, char *argv[])
{
foo(100, 200, 300);
return 0;
}
运行结果是:
x = 100 at [...60]
y = 200 at [...64]
z = 300 at [...68]
这是由于,C程序栈的内存生长方式是往低地址内存生长,这也说明为什么局部变量无法申请太大内存,因为栈内容有限。此外,这个例子说明,函数参数的入栈的

本文详细探讨了C/C++中函数参数的入栈顺序,指出通常是按照从右往左的方式进行,并解释了这与编译器的调用约定有关。同时,文章讨论了_Cdecl调用约定如何处理可变参数,以及不同调用约定如_Stdcall、_Fastcall和_thiscall的特点。最后,区分了参数入栈顺序与参数计算顺序的不同,并提醒读者C语言不支持默认参数。
最低0.47元/天 解锁文章
553

被折叠的 条评论
为什么被折叠?



