书接上文,现在又碰上了static局部变量的另外一个案例,还是拿之前的代码做比较,源代码修改为
void add()
{
static int aa=0;
if(aa==0)
{
aa=1;
printf("aa的值赋值为1\n");
}
else
{
aa++;
printf("aa=%d\n",aa);
}
}
这个源代码还是定义了一个int类型的static变量,只不过多了a++的步骤,我们使用main继续调用三次
int main()
{
add();
add();
add();
}
然后运行一下看看这次结果:
这次aa的也是不一样,而且一直都是累加,每次加1,上个案例说由于aa是静态局部变量,所以aa只能初始化一次,所以第二次第三次调用aa的值一直保持1不变,但是这个案例aa的值为什么一直在累加呢?
这次还是因为aa是静态局部变量,因为这句话还有下半句,static局部变量只被初始化一次,下一次依据上一次结果值。这样就可以解释得通了,aa的值初始化为1后,下一次调用拿上一次的结果还是为1,执行++操作后,aa的值就修改为2了,这也是aa为什么等于2的原因,同理,执行第三次时,aa还是拿第二次的结果,aa=2,执行++操作后,aa的值就修改为3了。
是不是很神奇,我现在能感觉一点编程的奇妙之处了,与君共勉!