有以下程序:
#include <stdio.h>
fun(int x, int y)
{static int m=0, i=2;
i+=m+1; m=i+x+y; return m;
}
main()
{int j=1, m=1, k;
k=fun(j,m); printf("%d,",k);
k=fun(j,m); printf("%d\n",k);
}
执行后的输出结果是( A )。
A) 5, 11
B) 5, 5
C) 11, 11
D) 11, 5
i+=m+1含义为:i=i+m+1.
第一次调用子程序fun时,赋值得:x=j=1,y=m=1.而子程序里m=0,i=2.所以
运行i+=m+1得 i=3; 运行m=i+x+y得 m=5. 同时返回值m=5,即把5赋值给fun,即k=5,输出k=5.在这次调用中x、y值没改变,所以fun(j,m)中的j、m值不变。
第二次调用fun时,赋值还得:x=j=1,y=m=1。而此时,因m、i为static型变量,即静态变量,它们保持上次运行结果即m=5,i=3,通过运算的m=11.
要考计算机二级的同学刷题的时候遇到这道题,问我。我居然也懵了。欸,我这专业课学得也太辣鸡了……
扎心了~~~