#include<stdio.h> f(int a) { int b=0; static int c=3; a=c++,b++; return(a); } main() {int a=2,i,k;

for(i=0;i<2;i++)k=f(a++);printf("%d\n",k);}为什么k为4呢?求解过程... for(i=0;i<2;i++)
k=f(a++);printf("%d\n",k); }   

为什么k为4呢?求解过程
展开
 我来答
♂凡鸟♂fcb78ab
推荐于2018-02-13 · TA获得超过3711个赞
知道小有建树答主
回答量:586
采纳率:100%
帮助的人:614万
展开全部
首先f函数中的c是一个静态变量,生命周期是全局的,
这里c的3是以初值形式赋予的,所以只有第一次执行f()的时候赋为3,
所以执行循环的时候:
i=0时,a=2,先取值后++,f(2),a=3;f函数内a=c++,先取值后++,a=3(这个a的作用于在函数f内,不影响外部的a),c=4,最后的a被return给k;k=3;
i=1时,a=3,先取值后++,f(3),a=4;f函数内a=c++,先取值后++,a=4,c=5,a被return给k,k=4。
i=2时,循环结束。
最后输出k为4。
抬头望那苍穹
2013-03-10 · 超过24用户采纳过TA的回答
知道答主
回答量:112
采纳率:0%
帮助的人:52.4万
展开全部
你写的乱七八糟。
不过我猜到了你的程序,你不明白的应该是为什么c在第二次调用的时候,值是4不是3了是吧。
这个c定义的是静态局部变量,它被存放在全局数据区。所以函数结束以后c的内存不会被收回,还会保存上一次调用完成以后的值,而静态局部变量只在第一次调用的时候初始化,第二次调用的时候它保持上一次调用完成后的值。你的程序里面f函数调用两次,第一次调用后c变成4,所以第二次调用时候,f的返回值就是4+0 = 4.所以输出的就是4.你可以去百度搜索一下static,看一看这个静态变量的具体说法
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
存在de虚幻
2013-03-10 · TA获得超过120个赞
知道答主
回答量:47
采纳率:0%
帮助的人:9.9万
展开全部
很简单啊,前面c是静态成员变量,并不会随着函数的消失而消失。并且c = 3;在f()函数里,返回a的值,而a的值第一次循环的时候为3,然后c做自加的操作此时变成了4,所以返回回来的是4。这个函数的关键点在static和右++。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
秋寒0N7
2020-03-14 · TA获得超过3万个赞
知道小有建树答主
回答量:1.1万
采纳率:33%
帮助的人:816万
展开全部
#include
int
f(int
a)
{
int
b=0;
static
int
c=3;//静态变量,只做一次初值赋值,即:第一次调用fun
c=3
a=c++,b++;
//第一次调用本函数后,c=4,第二次后,c=5,第三次后c=6......
return
a;
//第一次调用本函数后,a=3,二次后,a=4,第三次后a=5.....
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式