#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本回答被网友采纳

#include<stdio.h>int f(int a){int b=0;static int c=3;b++;c++;r...
答案 : 7 8 9 过程 此题考查静态局部变量 加了static的静态局部变量在函数调用以后内存没有释放(因为static修饰的局部变量内存分配在全局区(也叫静态区),未使用static关键字修饰的局部变量内存分配在栈区(栈区的生命周期是函数结束之后)),因为c被static关键字修饰,所以下次进入此函数,c的值是...

...b=0;static int c=3; b++;c++; return(a+b+c); } void main() {...
答案是789,如果你在输出里面加上一个空格的话就是 7 8 9,完。

...b=0; static int c=3; b++; c++; return a+b+c; } main() { int...
include"stdio.h" int f(int a) {int b=0; static int c=3; b++; c++; return a+b+c; } main() {int a=2,i; for(i=10;i<13;i++) printf("%4d",f(a));}运行程序后,输出 7 8 9在每次调用f()函数时,b会每次都赋初值为0,然后再加1;而c是“静态变量”,...

...int a) { int b=0; static int c=3; a=(c++,b++); return (a...
a=(c++,b++);由于(c++,b++)中用了逗号,逗号作为运算符时返回最后的表达式值,所以这句相当于a=b++,由于++在后,所以这又相当于a=b;所以返回0

...f(int a) { int b=0; static int c=3; a=c++,b++; return(a); }...
首先f函数中的c是一个静态变量,生命周期是全局的,这里c的3是以初值形式赋予的,所以只有第一次执行f()的时候赋为3,所以执行循环的时候:i=0时,a=2,先取值后++,f(2),a=3;f函数内a=c++,先取值后++,a=3(这个a的作用于在函数f内,不影响外部的a),c=4,最后的a被return给k;k=...

#include <stdio.h> int f(int a) { int b=0; static int c=3; a=c...
<stdio.h> int f(int a){ int b=0;static int c=3;\/\/静态变量,只做一次初值赋值,即:第一次调用fun c=3 a=c++,b++; \/\/第一次调用本函数后,c=4,第二次后,c=5,第三次后c=6...return a; \/\/第一次调用本函数后,a=3,二次后,a=4,第三次后a=5...} ...

fun函数问题
include <stdio.h>int fun(int a){int b=0;static int c=3;a=(c++,b++); \/\/整体为逗号最右边的值,【即 b==0 赋值给a , b再自增为1】return(a);}main(){int a=2,i,k;for(i=0;i<2;i++)k=fun(a++); \/\/每一次调用,不管实参 a 的值是多少,形参 a 的值取 ...

int f(int a) {int b=0; static int c=3
对于主函数, 循环执行3次, 每次调用函数f的参数都是a=2. 即调用三次f(2) 打印返回值。对于函数f。 调用三次, 每次都是参数a=2, 三次参与a+b+c运算时都是a=2 b是局部变量, 每次初始化为0,之后自加为1。三次参与a+b+c运算时都是b=1 c是静态变量, 每次是上次退出值。 每次调用...

...#include <stdio.h> main() { int a=0,b=0,c=0,d=0; (a++ && b+...
得到结果为假(由于是后置自增运算符,所以a在判断的时候为0,判断之后为1)。&&运算中,只要有一个条件为假,则整个条件为假,所以程序不再判断b++这个条件,并且将(a++&&b++)这个条件判定为假。所以程序执行冒号后面的d++。所以a=1,b=0,c=0,d=1。所以答案选D ...

#include<stdio.h> void f(int i) { int a=2; a=i++; printf("%d,",a...
函数f(c);是值传递,不改变参数c的值。

相似回答