首页 > 开发 > C++ > 正文

为什么函数在第二次调用的时候可以继续使用里面的局部静态变量?

2017-09-11 21:18:58  来源: 网友分享
#include <stdio.h>void func_a() {    static int a = 0;    a++;    printf("%d\n", a);![clipboard.png](/img/bVUujO)}int main(int argc, char const *argv[]){    func_a();    func_a();    return 0;}

我想的是,函数func_a在调用完一次之后,栈空间就被释放掉了。虽然静态变量a仍然被保存在了某块内存中,但是,原来的栈空间保存的信息已经没了。那么问题就来了,第二次调用它是怎么知道这个变量a所在的位置?而且它是怎么知道就是上次调用的那个变量a

解决方案

虽然栈空间没了,但是函数的代码还在呀。a的地址是在代码段里写明的,它不是栈空间里的变量。

  • 函数是怎么知道a的位置?是编译器告诉它的。编译器把static a放在数据段以后记下地址,函数里面用到a的地方都编译成引用那个地址就好了。

  • 函数是怎么知道就是上次调用的那个变量?它知不知道没有关系。只要用那个数据段里面的地址的内容就好了。