问题 单项选择题

有以下程序:
#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) 5, 5
B) 5, 11
C) 11, 11
D) 11, 5

答案

参考答案:B

解析: 本题主要考查的知识点是静态局部变量的运用。如果在定义一个局部变量时使用了static关键字,则这个局部变量就被定义成了一个静态局部变量。一般的局部变量随着函数被调用而诞生,在函数返回时被销毁。而静态局部变量在函数调用结束后不会被销毁,在下一次该函数被调用时,还会保留上一次函数调用结束时的值。本题的fun()函数中定义的变量m和i就是静态局部变量,第1次调用fun()函数时m=0、i=2,执行i+=m+1后,i的值变为3,再执行m=i+x+y后,m的值变为5,所以第1次输出的整数是5。第2次调用fun()函数时m=5、i=3,执行i+=m+1后,i的值变为9,再执行m=i+x+y后,m的值变为11,所以第2次输出的整数是11。

判断题
单项选择题