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++){inta=3;k+=F(a);}k+=a;printf("%d\n",k);}结果为什么是14... for(i=0;i<2;i++){int a=3;k+=F(a);}k+=a;printf("%d\n",k);}结果为什么是14 展开
 我来答
memberwin
2011-07-01 · TA获得超过3903个赞
知道大有可为答主
回答量:1000
采纳率:100%
帮助的人:510万
展开全部
首先要明确变量的作用域,以及static函数的意义
int a=1; a是全局变量,其作用域为其之后的所有函数,但若函数中又声明了a变量,则全局变量不再起作用
static int a=2; a是静态变量,该变量作用域为f函数,且对其修改都将保存, 所以在f函数内全局变量a不起作用
int a=3, a是局部变量, 其作用域仅为for模块内,for执行完后,局部变量a不再有效,所以在main函数中F(a)调用时是用的局部变量a,但for后面的k+=a;则是全局变量a
这样就可以理解了
i=0; 进入for内部语句, k += F(3)所以 k = 0+F(3) = 0+ (a++ + c + 1) = 2+ 3+1 =6
执行完这个后,静态变量a自加,所以a = 3
i=1; 进入for内部语句, k+=F(3), k = 6+F(3) = 6+ (a++ + c + 1) = 6 + (3 + 3 +1) = 13
执行完这个后,静态变量a自加,所以a = 4
i=2,不再进入for内部
执行k+=a;此处的a为全局变量a,所以 k += 1, k =14
输出
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式