首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

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

2012-02-23 
为什么是这样的结果?为什么结果是2,6,42,3怎么可以同时在main函数中同时定义inti0和staticinti1?#incl

为什么是这样的结果?
为什么结果是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

热点排行