static int a=2;
的有关信息介绍如下:问题补充说明:有以下程序 #include int a=1; int f(int c) {static int a=2; c=c+1; return (a++)+c;} main() { int i,k=0; for(i=0;i<2;i++){int a=3;k+=f(a);} k+=a; printf(“%d\n”,k); } 程序运行结果是为什么谢谢
14!
考虑作用域及可见性的问题,以及++的用法
按照程序执行的顺序来分析
i=0时,定义了inta,a的作用域仅仅在inta=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,值为360问答1,所以k的值变成了措齐在层14!
Okay?