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

{inta=2,i;for(i=0;i<3;i++)printf("%d",f(a));}还有答案中又得有空格的是杀????????????????... { int a=2,i; for(i=0;i<3;i++) printf("%d",f(a));}还有答案中又得有空格的是杀???????????????? 展开
 我来答
悄逝的流年
2020-12-10 · TA获得超过167个赞
知道小有建树答主
回答量:179
采纳率:20%
帮助的人:39.5万
展开全部

答案 : 7  8  9


过程

    此题考查静态局部变量  加了static的静态局部变量在函数调用以后内存没有释放(因为static修饰的局部变量内存分配在全局区(也叫静态区),未使用static关键字修饰的局部变量内存分配在栈区(栈区的生命周期是函数结束之后)),因为c被static关键字修饰,所以下次进入此函数,c的值是上次修改以后的。但是普通的局部变量,如题b每次调用以后释放内存,下次调用是都是初始化为初值.

在main函数中  

    第一次调用f(a)  f函数内的变量 b = 1, c = 4, a = 2 返回值就是7

    第二次调用f(a)   f函数内的变量 b = 1, c = 5(静态局部变量) a = 2 返回值8  

    第三次调用f(a)   f函数内的变量 b = 1, c = 6(静态局部变量) a = 2 返回值9

空格问题    如果main函数的输出函数是printf("%d", f(a)); 则没有空格

    如果main函数的输出函数是printf("%d ", f(a)); 则有空格(注意区别,在%d后有空格)


追问
过程加解析,还有789中间有空格吗?
追答
过程:
  此题考查静态局部变量  加了static的静态局部变量在函数调用以后内存没有释放,所以下次进入此函数,c的值是上次修改以后的。但是普通的局部变量,如题b每次调用以后释放内存,下次调用是都是初始化为初值.
    
   在main函数中  
     第一次调用f(a)  f函数内的变量 b = 1, c = 4, a = 2 返回值就是7
    第二次调用f(a)   f函数内的变量 b = 1, c = 5(静态局部变量) a = 2 返回值8  
    第三次调用f(a)   f函数内的变量 b = 1, c = 6(静态局部变量) a = 2 返回值9
空格问题
  如果main函数的输出函数是printf("%d", f(a)); 则没有空格
  如果main函数的输出函数是printf("%d ", f(a)); 则有空格(注意区别,在%d后有空格)
匿名用户
2016-06-27
展开全部
#includeint f(int m){static int n=0; //静态变量,只初始化一次,第二次为上一次的剩余结果n+=m;return n; //第一次n=1 第二次m=1,n+=m=2}void main(){int n=0;printf("%d,",f(++n)); //++n,先自增,后调用n,相当于调用f(1)printf("%d\n",f(n++)); //n++,先调用n,后自增,相当于调用f(1)}结果为1,2
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式