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空间
{
int z;
z = a+b;
return z;
}
调用这个函数,当前程序的栈上会分配4个int 的空间 (编译器优化后 产生的汇编指令 应该就在栈上申请两个int空间) 一个存返回值 一个存a 一个存b 一个存z 当这个函数运行完之后 这写变量会出栈 即释放4个int空间
作者: pclvmm 发布时间: 2011-12-05
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28