第1个回答 2015-03-14
第一次调用时:n=3,a初始化为1,返回时,n的值为4,a值为2
第二次调用时:n=3,a保持函数上次调用后的值为2,则返回时,n的值为5,a的值为3
所以输出的s的值为9
第2个回答 2015-03-14
#include <stdio.h>
/*申明函数*/
int f(int n);
//主函数
main()
{ int a=3,s;
s=f(a);s=s+f(a);//调用f(int n)函数并且把返回值赋值给s
printf("%d\n",s);
}
int f(int n)
{ static int a=1;//申明全局变量a,程序不死,a就永存。
n+=a++;
return n;
}
第3个回答 推荐于2016-07-21
程序中出现2个变量a,其中一个 是主函数的 局部变量,另一个是 f 函数的 静态变量,2个是不同的,别混了。
程序开始:
主函数定义并初始化 局部变量 a=3,s 默认=0;
s=fa=f(3),第一次 调用 f 函数;
在 f 函数中,static int a=1 语句,仅仅执行一次,第一调用 f 函数时被执行,后面再调用 f 函数,由于 a 是静态变量,不释放空间,a 已定义,所以后面调用 f 函数 就不再 执行 a=1 这句。
a=1,执行 n+=a++;a++为后缀自增,必须等到 整条语句结束了,a 才会 自加,所以执行的时候,a 还是=1;那 n+=a++ → n=4,a=2;返回 n=4;
回到 主函数,s=f(3)=4;
s=s+f(a),这个a 是主函数的局部变量,一直没变,还是3;那就成了 s=s+f(3),再次调用 f 函数,f 函数中,a 已经=2;n+=a++ → n=5,a=3(与第一同理);返回 n=5;
回到主函数,s=s+f(3)=4+5=9;
打印 9<回车> (s);本回答被提问者和网友采纳