+ -
当前位置:首页 → 问答吧 → C语言栈和函数调用的问题

C语言栈和函数调用的问题

时间:2011-12-05

来源:互联网

“当调用函数时,被调用函数的参数和返回值被储存当前程序的栈区,之后被调用函数再为自身的自动变量和临时变量在栈区上分配空间。当函数调用返回时,在栈区内的参数返回值、自动变量和临时变量等都会被释放。这就是为什么c语言函数参数如果不是指针的话,被修改的参数结果用户无法得到的原因。”

以上是书上的原话,感觉很难理解,
以前编程验证过用指针做函数形参,用这样的方法将修改后的结果传回主函数。当时觉得原理懂了
今天看到这个涉及到栈的说法,感觉是更深一个层次的理解。虽然栈的原理很简单,但是在下很难理解上面的说法(惭愧。。)
主要是自动变量,临时变量是什么?
函数参数、返回值、自动变量、临时变量它们是怎么入栈的又是怎么出的?
虽然分不多,但是希望有高手能不吝赐教,在下痛感涕零!!能回答一个两个问题的都请赐教!
有例子最好 ^_^

作者: Eliyah_   发布时间: 2011-12-05

引号说的是__cdecl的调用约定~

作者: mscf   发布时间: 2011-12-05

找本书看看调用时的 stack 结构,

深入理解计算机系统 有图

作者: AnYidan   发布时间: 2011-12-05

作者: Demon__Hunter   发布时间: 2011-12-05

int fun(int a, int b)
{
  int z;

  z = a+b;
  return z;
}
调用这个函数,当前程序的栈上会分配4个int 的空间 (编译器优化后 产生的汇编指令 应该就在栈上申请两个int空间) 一个存返回值 一个存a 一个存b 一个存z 当这个函数运行完之后 这写变量会出栈 即释放4个int空间

作者: pclvmm   发布时间: 2011-12-05