C语言中的静态变量

#include <stdio.h>
int fun(int n)
{

static int a =3;
int t =0;
if(n%2)
{
static int a =4;
t+=a++;
}
else
{static int a =5;
t+=a++;
}

return t+=a++;
}
main()
{
int i,s=0;
for (i=0;i<3;i++)
s+=fun(i);
printf ("%d\n",s);
}

这个static int a =4;和static int a =3;有没有被执行,为什么 求大神

    用static声明的变量是静态变量,比如static int a =4;这个a的初始值为4(仅仅是初始值),并且这个变量是一直存在的。

    几个a并不是同一个a,我们可以把程序中的a改一下名字,方便理解。如下:

    #include <stdio.h>
    int fun(int n)
    {
    static int a =3;
    int t =0;
    if(n%2)
    {
    static int b =4;
    t+=b++;
    }
    else
    {static int c =5;
    t+=c++;
    }

    return t+=a++;
    }
    main()
    {
    int i,s=0;
    for (i=0;i<3;i++)
    s+=fun(i);
    printf ("%d\n",s);
    }

    开始在稿纸上分析。


温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-11-22
调用函数执行完之后局部变量空间会释放,但是如果是static静态变量就不会被释放。追问

那后面的两个static执行了吗

追答

这两个static都执行了

追问

那我算下是33 运行下来是 27

追答

static int a =3;作用域为整个fun函数
static int a =4;作用域为if为真时
static int a =5;作用域为if为假 也就是else的时候
所以循环运行3次为8+8+11

第2个回答  2015-11-22
这两个都是静态局部变量,static int a =4;因为在if程序块中,它的有效区域更小。

静态局部变量的特点,静态是说,在同一个进程中第二次调用是上次运算过的值,局部变量是在函数内部,包括main函数内部声明的变量。。。