不是说自动变量在函数结束时也从栈区中清除了吗?那为什么我的代码里两次调用函数i的地址都一样。
Output:fun中i的地址是:7732732---------------------------fun中i的地址是:7732732#include<stdio.h>...
Output:
fun中i的地址是:7732732
---------------------------
fun中i的地址是:7732732
#include <stdio.h>
int main()
{
fun();
printf("\n---------------------------\n");
fun();
}
int fun() {
int i = 5;
printf("fun中i的地址是:%d\n", &i);
} 展开
fun中i的地址是:7732732
---------------------------
fun中i的地址是:7732732
#include <stdio.h>
int main()
{
fun();
printf("\n---------------------------\n");
fun();
}
int fun() {
int i = 5;
printf("fun中i的地址是:%d\n", &i);
} 展开
1个回答
展开全部
静态函数会存储在全局数据区,类似汇编语言中的.data段局部变量在进程栈里,每个函数调用完成都有堆栈平衡操作,局部变量在此时释放函数是执行的指令代码,在代码段。代码段、数据段、堆栈段,是一个进程地址空间的分划。怎么他们说成函数也存在数据区??函数应该是代码呀,当然是在代码段了。《C专家编程》作者说过这个问题,就是static这个关键字是安排的不和理的,是C语言的多做之过static对于变量来说,是说地址保存在全局数据区,函数退出变量仍然保存。static对于函数来说,是指此函数仅对文件可见,就是说在其他文件里面不能使用这个文件。是属于访问控制。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询