c语言深度剖析例子解决思路

c语言深度剖析例子
static int j;
void fun1()
{
static int i = 0;
i++;
printf("i=%d\n",i);
}
void fun2()
{
j=0;
j++;
printf("j=%d\n",j);
}
int main()
{
  int k;
for(k=0; k<10; k++)
{
  fun1();
  fun2();

}
 system("PAUSE");
  return 0;
}

结果i=10,j=1,它们的区别就是一个全局静态变量,一个局部静态变量。但它们在函数中都重新复制为0了,为什么一个为10呢?

------解决方案--------------------
C/C++ code

void fun1()
{
static int i = 0;  // 声明的时候才赋初值,也就是第一次被执行到的时候赋初值0.之后的调用不赋初值
i++;
printf("i=%d\n",i);
}
void fun2()
{
j=0; // 每次调用都被置零。
j++;
printf("j=%d\n",j);
}

------解决方案--------------------
static int i = 0;这个重置操作只会执行一次,以后不再重置。
j=0; 这个每次都执行。

静态变量定义语句里的初值设置只执行一次。
------解决方案--------------------
C/C++ code

void fun1()
{
    static int i = 0; //这句可不是每次都被赋值为0,只是声明的时候初始化为0,后续都不会再执行这句.
    i++;
    printf("i=%d\n",i);
}

------解决方案--------------------
正解!
探讨
C/C++ code

void fun1()
{
static int i = 0; // 声明的时候才赋初值,也就是第一次被执行到的时候赋初值0.之后的调用不赋初值
i++;
printf("i=%d\n",i);
}
void fun2()
{
j=0; // 每次调用都被置零。
j++;
printf("j=%d\n",j);
}

------解决方案--------------------
探讨
static int j;
void fun1()
{
static int i = 0;
i++;
printf("i=%d\n",i);
}
void fun2()
{
j=0;
j++;
printf("j=%d\n",j);
}
int main()
{
int k;
for(k=0; k<10; k++)
{
fun1();
fu……

------解决方案--------------------
探讨

引用:
static int j;
void fun1()
{
static int i = 0;
i++;
printf("i=%d\n",i);
}
void fun2()
{
j=0;
j++;
printf("j=%d\n",j);
}
int main()
{
int k;
for(k=0; k<10; k++)
{
fun1();
……