解答一道C语言题目

#include<stdio.h>fun(inta){intb=4;staticintc;b++;c++;return(a+b+c);}voidmain(){inta=2... #include<stdio.h>
fun(int a)
{int b=4;
static int c;
b++;c++;
return(a+b+c);}
void main()
{int a=2,c=3;
printf("%d,%d,%d",fun(c),fun(a),fun(fun(c)));}
程序输出多少,请详细解答,学详细越好
展开
 我来答
lvMon
2010-02-23 · 超过16用户采纳过TA的回答
知道答主
回答量:40
采纳率:0%
帮助的人:43.5万
展开全部
楼主这种问题我建议的先别运行,而是猛按F10,可以看到那些变量的变化。
若楼主不习惯用F10也没所谓的,
以下程序喔加了两个printf ,可以明显的给出fun()函数中a,b,c的变化供楼主研究;

#include<stdio.h>
fun(int a)
{
int b=4;
static int c;
printf("a=%d b=%d c=%d\n",a,b,c);
b++;c++;
printf("a=%d b=%d c=%d\n\n",a,b,c);
return(a+b+c);
}
void main()
{
int a=2,c=3;
printf("%d,%d,%d",fun(c),fun(a),fun(fun(c)));
}

我运行的答案是:
a=3 b=4 c=0
a=3 b=5 c=1

a=9 b=4 c=1
a=9 b=5 c=2

a=2 b=4 c=2
a=2 b=5 c=3

a=3 b=4 c=3
a=3 b=5 c=4

12,10,16Press any key to continue

分析一下就知道,我的系统是从右到左运行的;
第一堆数是fun(fun(c))的fun(c)调用,变量的初始化和变化都显示了;
第二堆数是fun(fun(c))的fun(...)调用,其中它的实参是fun(c)调用的返回值9;
第三堆,第四堆就不用我分析了。

其中要注意的是:变量c是静态变量,每次调用都是使用之前一次调用之后的值;所以可以看到很有顺序的1,2,3,4
而变量b是动态变量,所以你可以看到b总是4,5(b++)后;
hyieq
2010-02-23 · TA获得超过219个赞
知道小有建树答主
回答量:630
采纳率:0%
帮助的人:307万
展开全部
你执行一下不就知道了。。。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
太阳之子Nash
2010-02-23 · TA获得超过267个赞
知道答主
回答量:174
采纳率:0%
帮助的人:0
展开全部
b 是一个局部变量,在调用结束后就从内存中释放了,而c是静态的局部变量 它的生命期为整个程序单位,在fun函数调用结束后它不会释放,继续保留存在(其值为上一次调用结束后的返回值)。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式