#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));}还有答案中又得有空格的是杀????????????????
展开
2个回答
展开全部
答案 : 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
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询