#include
int a=1;
int f(int c)
{
static int a=2;
c=c+1;
return (a++)+c;
}
int main()
{
int i,k=0;
for(i=0;i<2;i++){
int a=3;
k+=f(a);
}
k+=a;
printf("%d\n",k);
return 0;
}
最后输出14
考虑作用域及可见性的问题,以及++的用法
按照程序执行的顺序来分析
i = 0 时,定义了int a ,a的作用域仅仅在int a=3;k+=f(a);语句中,执行完后a就被释放了。先做f(3),
此时在f(3)的stack区中
c = c+1,执行完后c=4;
(a++)+c的值是2+4=6,此时全局变量a被局部变量a所覆盖,不可见,但是有作用域。
然后a=3并且保存在data区中,直到程序结束后才释放 f返回时,返回的是6,则k=6 i = 1时,做f(3),同上,c=4,注意此时局部静态变量a的值是3,因此(a++)+c的值是7,之后a自增成4 f返回时,返回的是7,那么k+=f(a)的结果就是6+7=13 i = 2 时,退出循环 k+=a;此处的a是全局变量a,值为1,所以k的值变成了14!