读书人

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

发布时间: 2012-05-10 16:02:39 作者: rapoo

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();
……

读书人网 >C++

热点推荐