2014-09-01 54 views
-1

我有一个关于静态变量的简单问题。如果我在一个函数中声明了一个静态变量:C中的局部静态变量范围

void main() 
{ 
    int k = 0 
    while(k<=4) 
    { 
     fun(); 
     k++; 
    } 
} 
int fun() 
{ 
    static int i=5; 
    i++; 
    printf(Value %d\t", i); 
    return 0; 
} 

据我所知,函数将在返回后释放。但存储的值是i。是一个像全局变量一样的静态变量。

+0

'静态就像全局变量.'没有!!!!在生命时间方面是相同的,在可见度方面不同。 – 2014-09-01 06:20:25

+0

请先修复语法错误,然后再转到哲学问题:) – 2014-09-01 06:21:02

+1

C规范没有说明变量必须存储在哪里,只是局部静态变量生存期在整个程序中。但是,编译器通常将局部静态变量与全局变量一起存储。 – 2014-09-01 06:21:42

回答

2

该函数不会在返回时取消分配i里面的fun()i的存储与全局变量处于相同的一般区域 - 但它不是全局变量。它只能在定义它的功能fun()内部访问。它与任何其他变量i或任何其他变量i(在任何源文件中都是静态的)或源文件中定义了fun()的文件范围静态变量i分开。它只要程序就有一生。

1

据我所知,函数返回后会释放 - 。我认为你的假设是错误的!

static从函数返回后,变量不会被释放。

它在哪里存储? - static变量存储在“数据部分”或“数据存储器”中。

生活 - static变量的寿命从程序加载到RAM中开始,到程序执行结束时开始!