有关c语言函数静态变量

#include <stdio.h>
#include <string.h>
int func( int k )
{
int x=1;
static y=10;
x++; y++; k++;
return x+y+k;
}
main()
{
int k=100;
printf( "%d\n", func(k+=100) );
printf( "%d\n", func(k+=100) );
printf( "%d\n", func(k+=100) );
}
输出:?
答案是:214,315,416
能否再说下静态变量究竟是怎么个回事,这里的k是怎么运行的

静态变量是一种生存期为整个源程序的量。虽然离开定义它的函数后不能使用,但如再次调用定义它的函数时,它又可继续使用, 而且保存了前次被调用后留下的值。

第一个printf( "%d\n", func(k+=100) );
k+=100,k就是200;
x++; y++; k++; x=2,y=11,k=201;
所以第一次打印是214

第二个printf( "%d\n", func(k+=100) );
k+=100,k就是300;
x++; y++; k++; x=2,y=12,k=301;(y是静态变量,原值不变)
所以第二次打印是315

第三个printf( "%d\n", func(k+=100) );
k+=100,k就是400;
x++; y++; k++; x=2,y=13,k=401;(y是静态变量,原值不变)
所以第二次打印是416
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-01-03
静态变量初始化只执行一次至于K,main里的是一个变量,func的那个是形参在是另外一个变量,两者只通过func(K =100)有联系,把在main里k =100的值传递给func里的K,在func里改变K的值回到main里就没有用了。
第2个回答  2008-03-07
这个题考的就是静态变量,它有个自动变量不具备特点的就是数值在调用结束后,其固有的值并不改变,且被带到下一次调用中去。不像自动变量在下次调用又被重新初始化了。因此,本题第一次y=2后下次调用函数时y是从2开始而不是初始化的1。
相似回答