C语言新人求解,关于静态变量

#include
int Square(int i)
{
return i * i;
}

int main(void)
{
int i = 0;
i = Square(i);
for ( ; i<3; i++)
{
static int i = 1;
i += Square(i);
printf("%d,", i);
}
printf("%d\n", i);
return 0;
}

求大大们帮我看看i是怎么运行得呀,输出结果是2,6,42,3,但是我老想不明白......

 int main(void)
{
int i = 0;
i = Square(i);
for ( ; i<3; i++)
{
static int i = 1; //i=1只在第一次循环的时候执行
i += Square(i); //在循环里,i都是static的i,而不是外面的i
printf("%d,", i); //i本来是1,此时+1*1所以是2,输出2;第二次2+2*2=6,第三次6+6*6=42
}
printf("%d\n", i); //因为是外面的i,所以是3
return 0;
}

其实关键是了解到** 局部静态变量和全局静变量的 **

静态全局变量:

作用域为当前文件,从定义/声明位置到文件结尾。
生命周期为从程序运行到程序退出,即贯穿整个运行时间。
无显式初始化时默认初始化值为0。

静态局部变量:

作用域为当前函数,从定义位置,到其所在的{}的结束位置。
生命周期为从程序运行到程序退出,即贯穿整个运行时间,当下次函数调用时,静态局部变量不会被再次初始化,而是沿用上次函数退出时的值。
无显式初始化时默认初始化值为0。

同时
#include
int Square(int i)
{
return i * i;
}

int main(void)
{
int i = 0;//这里的变量的定义之后 程序给i 一个地址 我的测试地址是”0x60ff34“

i = Square(i);// i=0

for ( ; i<3; i++)//这里是用普通变量i 进行控制的 所以 这里的 i 是由0 到 3结束循环的
{
static int i = 1;//这里是静态变量 重新开辟i 的空间 我的测试地址是”040200“ 可以比较上面的 明显是不同的值 同时静态变量初始是0

// 调试的时候可以发现 这个循环之中 这句话 就最开始执行了一次 之后的循环 是不再重新定义的 这就是和非静态变量的区别

i += Square(i);// 开始i=1+1*1 ,i=2+2*2, i=6+6*6........

printf("%d,", i);// 再根据静态局部变量的生命周期 知道 这个循环结束后 静态变量就完成了 使命
}
printf("%d\n", i);//最后输出普痛变量的值 i=3 (结束循环)
return 0;
}