c语言每个函数都有一个栈区对吗,函数的入口地址与栈区地址是一回事吗

 我来答
吉祥二进制
高粉答主

2015-02-06 · 科技改变生活,生活改变科技。
吉祥二进制
采纳数:33926 获赞数:84584

向TA提问 私信TA
展开全部
这个内存用来保存局部变量的, 一般叫做栈区,在编译原理 上叫做栈帧。比如下面的代码
int main()
{
int a = 2; //这个变量a就在main函数的内存中,就是main函数的栈区中。。
return 0;
}

而且栈区是栈区,是一个数据存储区,并不是main函数的代码区域 。。刚回答了这个问题。
追问
对啊,这不是代码区域,那为什么可以用指向函数的指针来调用函数
追答

函数指针指向的是函数的地址,函数起始地址,或者说那个函数名也是一个变量也有地址 ! 你可以写段代码看看,函数地址和栈区地址相差太远了。

#include<stdio.h>
void main()  {
int a = 2;
printf("%x\t%x\n" , main, &a);
}

你现在估计也是刚学C没多久,等以后接触到调试器,你就明白啥是栈区了。 拿OLLYDBG 来说,如下图所示,一目了然。

右下角的栈区是函数所需要的,左上角的那个有jmp 指令的是 代码区。。

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式