静态的局部变量:当函数执行完毕的时候,静态的局部变量的值在下次执行时,被保留了下来,为什么?

sinat_17416639 2014-07-09 12:41:01
1.静态的局部变量:生命周期是,随着函数的开始而开始,但是不会随着函数的结束而结束——意思是说,当函数执行完毕的时候,静态的局部变量的值在下次执行时,被保留了下来!!

2.可是,我不明白的是为什么被保留了下来呢?原理机制是什么?





例如,
#include iostream.h

int p(int x)
{
static int y=1; //声明一个静态的局部变量,并且对它进行初始化

y=y+1;

return (x+y);
}

int main()
{
cout<<p(1)<<endl; //第一次调用函数,x=1,y=2,输出结果是3
cout<<p(2)<<endl; //第二次调用函数,x=2,y=3,输出结果是5
}
...全文
2581 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2014-07-09
  • 打赏
  • 举报
回复 1
计算机组成原理→DOS命令→汇编语言→C语言(不包括C++)、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言(包括C++)、架构…… 对学习编程者的忠告: 眼过千遍不如手过一遍! 书看千行不如手敲一行! 手敲千行不如单步一行! 单步源代码千行不如单步对应汇编一行! VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化,这样过一遍不就啥都明白了吗。 对VC来说,所谓‘调试时’就是编译连接通过以后,按F10或F11键单步执行一步以后的时候,或者在某行按F9设了断点后按F5执行停在该断点处的时候。 (Turbo C或Borland C用Turbo Debugger调试,Linux或Unix下用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。)
赵4老师 2014-07-09
  • 打赏
  • 举报
回复
静态局部变量保存在全局数据区。
starytx 2014-07-09
  • 打赏
  • 举报
回复
存储位置和普通局部变量不同,相当于全局变量,所以能保留下来
yangyunzhao 2014-07-09
  • 打赏
  • 举报
回复
因为C++标准委员会那帮人规定了这样 然后各个编译器的实现人员就不得不遵守委员会的规定,否则老板就要开除他们
孑虫 2014-07-09
  • 打赏
  • 举报
回复
存储位置决定了它的生命周期
勤奋的小游侠 2014-07-09
  • 打赏
  • 举报
回复
因为它保存在内存的位置不一样。有些内存会被重复使用分配,有些内存则不会。
mujiok2003 2014-07-09
  • 打赏
  • 举报
回复
C/C++就是这样规定和设计的。
初見的畫面 2014-07-09
  • 打赏
  • 举报
回复
因为存储在静态存储区,所以只能初始化一次,而以后再函数调用的过程中其值都维持不变。
  • 打赏
  • 举报
回复
http://www.geeksforgeeks.org/memory-layout-of-c-program/
ImAmelie 2014-07-09
  • 打赏
  • 举报
回复
静态局部变量是存储在内存中的静态存储区的 随程序执行开始分配内存,直到程序结束进行释放。 对于静态局部变量,在程序开始是分配内存并且初始化。在以后调用函数的时候不再进行重新分配内存。

static int y=1;
对于这条语句,程序只执行一次,在以后使用此函数的过程中不再重新分配变量,相当于这条语句不执行了。

70,012

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧