读书人

为什么是这样的结果?该如何处理

发布时间: 2012-02-23 22:01:34 作者: rapoo

为什么是这样的结果?
为什么结果是2,6,42,3
怎么可以同时在main函数中同时定义int i=0;和static int i=1;?


#include <stdio.h>
int square(int i);
void main()
{
int i=0;
i=square(i);
for(;i <3;i++)
{
static int i=1;
i+=square(i);
printf( "%d, ",i);
}
printf( "%d\n ",i); getch();
}
int square(int i)
{
return(i*i);
}

[解决办法]
这种题真恶心……

循环体里面是static int i=1;的作用域,只声明一次,后两次循环仍保留值

外面是int i=0;的作用域,包括for的括号里
[解决办法]
这个容易理解麻
for(;i <3;i++)
{
static int i=1;
i+=square(i);
printf( "%d, ",i);
}
printf( "%d\n ",i); getch();
}
你在for循环里面定义了一个静态变量i,这个i和最开始定义的那个i除了名字一样以外没有任何联系的。c99规定在可以在for循环中声明变量,但这个变量的作用范围仅限于本循环内。所以我们得到了 2 6 42
而 3 才是真正输入第一个变量i的。因为经过了三次++运算。


[解决办法]
作用域不同
[解决办法]
作用域不同
{
static int i=1;
i+=square(i);
printf( "%d, ",i);
}
这个里面static int i=1有效
这个区域以外,int i=0;有效。。
所以运行的结果是2,6,42,3

读书人网 >C语言

热点推荐