int f (int n)
int f(int n){ static int a=1;
n+=a++; return n;}
函数里的a是静态变量,函数返回时不内存不回收,所以第一次进入函数时a为1,第二次为2
n+=a++相当于n=n+a++,a++表示先使用a,再自加1。所以第二次进来时a=2;然后选c很清楚了吧
9,所以C正确,选C——s=f(a)==n+=a++==3+1==4。s=s+f(a)==4+n+a++==4+3+2==9。为什么a第一次是1第二次是2?因为a是static变量,它的值不随函数退出而消失,而要保留到下一次被访问。毕。
#include
int f(int n)
{
static int a=1;
n+=a++;
return n;
}
main()
{
int a=3,s;
s=f(a); // 3=3+ a++ -> n = 3+ a; a++ 所以这时 a=2 返回4
s=s+f(a); // s = 4 + f(a) -> n = n + a->n=n+2; 返回5 4+ 5 = 9
printf("%d\n",s);
}
9
Press any key to continue
输出结果是
C.9
#include
int f(int n){
static int a=1;
n+=a++;
return n;
}
int main(){
int a=3,s;
s=f(a);
s=s+f(a);
printf("%d\n",s);
return 0;
}
C
亲你到 这里 这里 去试一下就知道答案了。这种太简单了的题目不建议问哦
第一次调用 f 函数, 实际参数 main.a = 3, 因此调用 f(3) ,
f.n = 3
f.a = 1
f.n += f.a++ // 这句等价于: f.n = f.n + f.a; f.a++;
因此有: f.n = 4; f.a =2
返回 f.n 到主程序,因此返回 4 到 main, 我们有 main.s = f的返回值 = 4
第二次调用 f 函数, 实际参数 main.a = 3, 因此调用 f(3)
f.n = 3
此时因为前一次调用之后 f.a = 2. 因此
f.n += f.a++ // 这句等价于: f.n = f.n + f.a; f.a++;
因此有: f.n = 5; f.a =3
返回 f.n 到主程序,因此返回 5 到 main, 我们有 main.s = main.s + f 的返回值,
也就是: s = 4 + 5 = 9。
如果这还看不懂,继续踩而不是赞的都是猪头。