楼主的问题涉及到自动(auto)变量,和静态(static)变量,
自动变量在定义时可以加前缀 auto 也可以什么都不加,就像int i....
静态变量定义时前面加上static修饰,使用
特征是:静态变量被调用后,调用是值并不消失,当再次调用时上次调用的结果就作为本次的初值使用;
注意变量 i ,楼主在两个地方有定义(如下程序
红色代码),但它们的作用范围不同,内嵌复合语句中的 i 只在此复合语句中起作用;而外部的 i 在整个函数中起作用,但因为被内嵌复合语句中的 i 所屏蔽,所以其作用达不到复合语句内部;因此,这两个 i 虽然名字一样,但却是两个不同的变量。
下面我们就楼主的程序进行分析:
#include<stdio.h>
int Square(int i);
main()
{
int i=0; //此处定义的i是外部变量
i = Square(i);
for( ; i<5; i+=2 )
//括号里面的i任然是外部变量
{
static int i = 1;
//此处楼主又定义了一个静态变量,也是复合语句内的变量,只在此复合语句中起作用,而且for后面花括号里面的复合语句里的 i 全是静态变量
i += Square(i);
printf("%d\t", i);
}
printf("%d\n", i);
//到此,复合语句已经结束,所以此处输出的 i 是外部的 i
}
int Square(int i)
{
return i*i;
}
下面,我们来讨论输出:(这里,为讨论方便,外部 i 就用 i 表示,内部 i 用 si 表示)
i=0<5, si=1, si=1+1*1=2,
输出2; i=i+2=2;
i=2<5, si=2, si=2+2*2=6,
输出6; i=4;
i=4<5, si=6, si=6+6*6=42,
输出42; i=6;
i=6>5,循环结束;
输出i ,i=6;