C语言程序设计 中的static函数问题

请教各位大师,C语言中的static函数指定某个变量为静态,有如下凝问待解!

f(int a)
{auto b=0;
static c=3; \\这里是指定c为静态变量,目的是要保留c的初始赋值3不变?还是要保留最后给c的赋值不变呢?\\
b=b+1;
c=c+1; \\是要保留该运算式最终给c的赋值结果不变吗?
return(a+b+c);
}
main()
{int a=2,i;
for(i=0;i<3;i++)
printf("%d",f(a));
}
非常感谢!!!!!!!!!!!!

说白了,就是每次调用c的值都是上次调用c的数值,

1  static在代码块内部改变变量的储存方式。由动态改为静态

2  static作用于代码块的外部,改变了变量的连接属性。。。由内部链接改为外部链接

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-02-05
是保留最后的赋值!!
从你这个例子而言,如果在主函数中再调用一次f(int a)并输出,b的初值还是 0 ;但是 c 初始值 却是 4 返回值比第一次的多 1 。
深入一点解释:
把一个变量定义为static型,意味着 这个变量的存储在.data段。auto型的局部变量存储在栈上。
调用函数有一个释放栈空间的问题:
如果在被调函数中把一个变量定义为static型,他的地址不会释放!但是如果定义为默认的 auto型,他的空间会被释放!
第2个回答  2013-02-02
f(int a)
{auto b=0;
static c=3; \\这里是指定c为静态变量,目的是要保留c的初始赋值3不变?还是要保留最后给c的赋值不变呢?\\
b=b+1;
c=c+1; \\是要保留该运算式最终给c的赋值结果不变吗?
return(a+b+c);
}
解答:
static c=3; \\这里是指定c为静态变量,在静态储存区,保留最后给c的赋值,这个C只能在这个函数里使用,但它的值一直存在,直到程序结束才消息,只要调用这个函数,取出C的值,那C的值就是上次修改的值

c=c+1; \\是要保留该运算式最终给c的赋值结果不变吗? 是的,一直保留到程序结束;本回答被网友采纳
第3个回答  2013-02-02
static c=3;
代表只是在第一次运行时初始化为3,以后不再初始化
后面每次加的1都要被保留下来,因此第一次执行后c为4,第二次执行后c为5。。。
第4个回答  2013-02-13
保留c的初始赋值3不变,只赋值一次。就不在初始话了。
相似回答