c语言编程问题 关于静态局部变量 请分析程序,要很详细的说明每一步为什么什么意思

#include <stdio.h>
int f(int n);
main()
{  int a=3,s;
  s=f(a);s=s+f(a); printf("%d\n",s);
}
int f(int n)
{  static int a=1;
  n+=a++;
  return n;
}

第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);本回答被提问者和网友采纳
相似回答