c语言这个程序结果为什么是12,static起了什么作用啊

#include<stdio.h>
int f(int m)
{
static int n=0;
n+=m;
return n;
}
main()
{
int n=0;
printf("%d",f(++n));
printf("%d",f(n++));
}

1、static作用:在int f()函数中,用static方式定义变量n,且赋初值0,表示该函数运行完,这个变量n不释放,下次再运行该函数时,变量n保持前一次运行结束时的值(不再赋初值0)
2、在本程序中,第一次printf("%d",f(++n));中,先给n加1,即n=1,然后再执行函数 f(),这时将函数中的形参m=1(注意:主程序中的变量n,与子程序 f()中的n,不是一个变量)
结果在子程序 f()中,n+=m;,即n+=1,因而输出个1
3、第二次printf("%d",f(n++)); 是先执行,f(n),然后再执行n++,但输出的是,f(n)的结果
这时n=1(主程序中的n),即执行,f(1),这次在子程序中,n的初值是1,再加1,结果是2,因而再次输出一个2,连续两次的结果,就成了12,其实是1 和2,不是12
温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-09-05
static int n=0;定义n为静态局部变量。静态局部变量只初始化一次,下次调用函数时,保持上次函数调用后的值。

因此,f(++n),即f(1)(前置自增,先自增,再传参数),返回1,同时,下次调用时f中的n=1,main中的n=1。
f(n++),即f(1)(后置自增,先传参数,再自增),返回2(因为f中的n保持上次调用的值1,n+=m;即n=n+m=1+1=2;),同时,下次调用时f中的n=2,main中的n=2。
第2个回答  2019-09-05
static表示该变量为静态,简单来说你可以理解为int f函数里面的int n=0;只执行一次,第二次printf的时候,进入到函数f,n不会被重置为0,而还是之前的值1。
有点像全局变量,只是这个变量只在当前的cpp有效,而全局变量是整个项目有效。
第3个回答  2019-09-05
函数f中的n只会被初始化一次,再次调用时,函数f中的n=上次调用后n的值;
相似回答