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呢?
------解决方案--------------------
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); }
------解决方案--------------------
正解!
------解决方案--------------------
------解决方案--------------------