循环中的static变量 求教

不知道程序怎么运算的。结果怎么出来的。。。图片

for里面是局部变量

  int i=0;
  i = Square(i);
  for(;i<3;i++){
      static int a= 1; 
        //局部变量作用范围就是for 里边,不影响外部,局部变量局部变量,把 i 的名换成 其他的能理解吧
        a = a+=Square(a);
        printf("%d",a);
    }
    printf("%d",i);//执行三次i++,为3 的原因

再加上前面的几位,我觉得他们说的很详细了
static 声明静态变量,在加载类的时候执行了一次仅此一次 ,就不再执行了。

static int i = 1;该语句只在进入循环的第一次时被执行,后面就不会再执行了。这就是static的语义。

static 静态的 只分配内存一次,初始化一次。
所以第一次:i+=1所以输出了2
第二次:static int i = 1;是没有作用的,i+=4,所以输出了6
第三次:同理,i+=36,输出了42
退出循环:输出了局部变量i的值3(注意,这里不是静态变量)
PS:相同的变量名,内层的变量会覆盖外层的变量

静态局部变量在程序执行到该对象的声明处时被首次初始化,即以后的函数调用不再进行初始化;从第二次开始实际代码就是这样了,而for循环中的i是局部变量不是由全局变量i决定的 for(li<3;i++){ i+=Square(i); printf()}

能看懂吗?能看懂吗?看不懂问我看图片下面图片图片

第一次进来static int i = 1,第二次循环不执行这句话,下次循环进来就保持上次循环结束时i的值,

static 使得i的值一直保留

能看懂吗?能看懂吗?能看懂吗?能看懂吗?图片