程序的重点应该在于主函数main对于f的调用,所以下面简单介绍下这个函数的执行过程(程序各语句的含义注释在在程序中);
1、执行s=f(a)时,执行函数f,参数n=3, 静态变量 a赋值为1,然后a+=2=1+2=3 ,接着,n+=a+=2 = 3+3=6 ,所以第一次返回n,为6;
2、执行s=s+f(a)时, 赋值语句右边 ,s为上一行的结果,为6 ,而f(a) 的调用让函数f再次执行,参数n的值依然为3,此次静态变量a已初始化一次,不再赋值,其值为上次执行的结果3, 接着执行a+=2=3+2=5,然后n+=a+=2=5+3=8,所以第二次返回n,结果为8,然后函数main()中,s=s+f(a)=6+8=14;
3、所以最后打印结果,输出为14.
参考链接:
#include <stdio.h> // printf函数的头文件
int f(int n); // 声明函数f
int main(void){ // 程序主函数main
int a=3,s; // 定义int型变量a和s,其中a赋值为3
s=f(a); // 此处第一次调用f(a),返回6 ,s=6
//printf("in main(), s=%d\n",s);
s=s+f(a); // 此处第二次调用f(a),返回8, s=s+f(a)= 6+8=14
printf("%d\n",s);
}
int f(int n){
// 第一次调用f(a), f中a=1
// 第二次调用f(a), a为静态变量,已在第一次调用变为3 ,静态变量赋值只执行一次
// https://blog.csdn.net/xiaohudeITmeng/article/details/52637405
static int a=1;
//printf("in f(), a=%d\n",a);
// 第一次调用 a+=2-->a=1+2=3, n+=a+=2 = 3+3 =6;
// 第二次调用 a+=3--->a=3+2=5 ,n+=a+=2 = 3+5=8
n+=a+=2;
// printf("in f(), n=%d\n",n);
// 第一次调用 返回6
// 第二次调用 返回8
return n;
}