题目
已知C语言函数定义如下:int add(int a, int b) ( static int count = 0; count++; return a + b + count; ) 若连续调用add(1,2)三次,以下说法正确的有哪些?A. 第二次调用返回值为5B. 第三次调用返回值为6C. 每次调用count都会被初始化为0D. 第一次调用返回值为4E. count变量的生命周期与程序相同
已知C语言函数定义如下:int add(int a, int b) { static int count = 0; count++; return a + b + count; } 若连续调用add(1,2)三次,以下说法正确的有哪些?
A. 第二次调用返回值为5
B. 第三次调用返回值为6
C. 每次调用count都会被初始化为0
D. 第一次调用返回值为4
E. count变量的生命周期与程序相同
题目解答
答案
ABDE
A. 第二次调用返回值为5
B. 第三次调用返回值为6
D. 第一次调用返回值为4
E. count变量的生命周期与程序相同
A. 第二次调用返回值为5
B. 第三次调用返回值为6
D. 第一次调用返回值为4
E. count变量的生命周期与程序相同
解析
本题主要考查C语言中静态局部变量的特性,包括初始化、生命周期和作用域等知识。解题的关键在于理解静态局部变量只会在第一次进入函数时进行初始化,之后每次调用函数时其值会保留上一次调用结束时的值。
下面我们来逐步分析每次调用add函数时的情况:
- 第一次调用
add(1, 2):- 当第一次进入
add函数时,静态局部变量count会被初始化为0。 - 然后
count的值加1,即count = count + 1 = 0 + 1 = 1。 - 最后计算返回值,根据函数定义
return a + b + count,将a = 1,b = 2,count = 1代入可得:$1 + 2 + 1 = 4$。所以第一次调用返回值为4,选项D正确。
- 当第一次进入
- 第二次调用
add(1, 2):- 由于
count是静态局部变量,不会再次初始化,此时count的值为第一次调用结束时的值1。 count的值加1,即count = count + 1 = 1 + 1 = 2。- 计算返回值,将
a = 1,b = 2,count = 2代入return a + b + count可得:$1 + 2 + 2 = 5$。所以第二次调用返回值为5,选项A正确。
- 由于
- 第三次调用
add(1, 2):- 同样,
count不会再次初始化,其值为第二次调用结束时的值2。 count的值加1,即count = count + 1 = 2 + 1 = 3。- 计算返回值,将
a = 1,b = 2,count = 3代入return a + b + count可得:$1 + 2 + 3 = 6$。所以第三次调用返回值为6,选项B正确。
- 同样,
- 关于
count的初始化:- 静态局部变量只会在第一次进入函数时进行初始化,之后每次调用函数时不会再将其初始化为0。所以选项C错误。
- 关于
count的生命周期:- 静态局部变量的生命周期与程序相同,即从程序开始运行到程序结束,
count变量都会存在。所以选项E正确。
- 静态局部变量的生命周期与程序相同,即从程序开始运行到程序结束,