解答一道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)));}
程序输出多少,请详细解答,学详细越好 展开
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)));}
程序输出多少,请详细解答,学详细越好 展开
3个回答
展开全部
楼主这种问题我建议的先别运行,而是猛按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++)后;
若楼主不习惯用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++)后;
展开全部
你执行一下不就知道了。。。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
b 是一个局部变量,在调用结束后就从内存中释放了,而c是静态的局部变量 它的生命期为整个程序单位,在fun函数调用结束后它不会释放,继续保留存在(其值为上一次调用结束后的返回值)。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询