一道C语言题目,可以帮忙解释一下解题过程吗

我算来算去都是6啊,可是答案是7。说在程序执行时,static变量仅初始化一次,保留上一次的值。下列程序执行后输出的结果是()f(inta){staticc=0;c=a+... 我算来算去都是6啊,可是答案是7。说在程序执行时,static变量仅初始化一次,保留上一次的值。

下列程序执行后输出的结果是( )

f(int a)
{ static c=0;
c=a+c++;
return(c);
}
main()
{ int a=2,i,k;
for(i=0;i<2:i++)
k=f(a++);
printf("%d\n",k);
}
展开
 我来答
西方惨败
2007-06-29 · TA获得超过1570个赞
知道小有建树答主
回答量:890
采纳率:0%
帮助的人:1094万
展开全部
对的,Static变量只初始化一次,然后它的数据就一直保存在内存中,直到程序结束。

因此,当a==2时,c=a+c++=2+0=2,c自加1,则c==3.a++以后a==3,此时函数里c=3,于是c=a+c++=3+3=6,c自加1,于是c==7
liujun_7177
2007-06-29 · TA获得超过649个赞
知道小有建树答主
回答量:459
采纳率:0%
帮助的人:638万
展开全部
c = a + c++; 中先c = a + c; 然后c++;
k = f(a++)调用两次
第一次k = f(a++)时传入2, c = 2 + 0; c++ = 3, a = 3;
第二次k = f(a++)时传入3, c = 3 + 3 = 6; c++ = 7
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
rumbusapple
2007-06-29 · TA获得超过356个赞
知道小有建树答主
回答量:456
采纳率:0%
帮助的人:297万
展开全部
第一次循环
循环前 a=2,c=3(2+0,然后自增1) k=3
循环后a=3
第2次循环
循环前 a=3,c=7(3+3--因为是static所以第一次循环的3保留值,然后自增1) k=7
循环后a=4
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
手机用户37319
2007-06-29 · TA获得超过185个赞
知道小有建树答主
回答量:146
采纳率:0%
帮助的人:77.7万
展开全部
第一次执行到f(a++)是,a=2
进入函数,c=0;
c=a+c=2
c++
return c=3;

f(a++) a=3
c=0;
c=a+c=3
c++
return c=4
两次结果相加=7
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
du管家
2007-06-29 · TA获得超过177个赞
知道答主
回答量:17
采纳率:0%
帮助的人:0
展开全部
这里的static定义,相当于定义一个函数外变量,可能你不得不理解关键字:static.
ps.使用中最好指定c的类型,指定函数f的返回值类型
:>

-----------------------------------------------------------

main函数:

循环:
i=0时:a=2 ,进入f函数,c=0 ,运算:c = a c 改变c的值,c=3跳出函数f,进行a 操作,a = 3 ,k = 3
i=1时:a=3 , 进入f函数,c保留上次结果 即,c = 3 运算:c = a c 改变c的值,c=7 跳出函数f,进行a 操作,a = 4 ,k = 7

打印k值: 7

-----------------------------------------------------------
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
test_abcd
2007-06-29 · TA获得超过3150个赞
知道大有可为答主
回答量:2162
采纳率:50%
帮助的人:2066万
展开全部
是的,static变量仅初始化一次,下次在遇到static c=0; 时,c不会重新赋值为0,而是上次c的值,这就是静态变量的特点
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(8)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式