有以下程序       #include   <stdio.h>       int   a=1;       int  f(int  c)       {  static  int a=2;          c=c+1;          return

admin2009-06-20  25

问题 有以下程序       #include   <stdio.h>       int   a=1;       int  f(int  c)       {  static  int a=2;          c=c+1;          return  (a++) + c;       }       main()       {  int  i, k=0;          for(i=0;i<2;i++)  {  int  a=3;  k += f(a);          k +=a;          printf("%d\n",k);       }

选项 A、14
B、15
C、16
D、17

答案A

解析 静态局部变量的作用域跟一般局部变量相同,都是从声明处开始到声明所在函数或语句块结束为止。但静态局部变量的生存周期却是从第1次执行到该静态局部变量的声明语句时起,直到程序结束。而—般局部变量的生存周期到离开它的作用域时就结束了。本题的f()函数中static int a=2;语句就声明了一个静态局部变量a,并初始化为2。主函数中,通过一个for循环连着调用了2次f()函数。两次调用形参c都为3,f()函数中让c增1变为4,然后输出(a++) +c,第1次调用a为2,所以输出结果为3+4=6,而第2次调用a被上次调用时的++运算符增1,所以为3,输出结果为3+4=7。所以主函数for循环结束后,k的值是13,下面一条k+=a;语句中的a是全局变量a,值为1。故最终输出结果是14,应该选择 A。
转载请注明原文地址:https://kaotiyun.com/show/R6Wp777K
0

随机试题
最新回复(0)