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

{ int a=2,i; for(i=0;i<3;i++) printf("%d",f(a));}还有答案中又得有空格的是杀????????????????

答案 : 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后有空格)

温馨提示:答案为网友推荐,仅供参考
第1个回答  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本回答被网友采纳