问一个c语言静态变量的问题?

来源:百度知道 编辑:UC知道 时间:2024/06/03 02:07:43
f(int a)
{auto b=0;
static c=3;
b=b+1;
c=c+1;
return(a+b+c);
}
main()
{int a=2,i;
for(i=0;i<3;i++)
printf("%d",f(a));
}
请问这个static c 后c有什么变化吗?一直保持是3?不自动加1 ?
回复楼下:那就是说b永远是1了?

请问这个static c 后c有什么变化吗?
答:根据你的程序,c=c+1,所以c是有变换的。
一直保持是3?
答:不是,从3开始的自加。
不自动加1 ?
答:自加1.

static c表示c的值将被保存在静态区。通俗的说就是不论调用f(int a) 多少次,c只初始化一次,并且,其值是有保存的。

例如,你第一次进入,c初始化为3,加1后为4
第二次进入,c为4,加1为5
第三次,c为5,加1为6
...
依次保存住了c的值。
我们要明白,一个子函数的变量在子函数销毁的时候就应该消亡,但是static的变量是静态的所以一直存在。
相对于c,b就惨多了,每一次进入f,b都为0.其实,b是重新被创建了一次,因为结束f函数后,b就消亡了。

补充:b确实永远是1,正解

不是有c=c+1么,每运行一次f,c的值就加1啊.

static变量的初始化只进行一次 ,运算结果可以长时间保留
auto变量的赋初值可以进行多次,每次调用f初值都为0(auto b=0; )

有变化,每执行一次F子程序,C就会加1.因为静态变量会自动记录下你计算后的值,并给当前的变量.