c语言全局变量的问题

#include <stdio.h>
int a=2;
int f(int m)
{
static int n;
n=0;n++;a++;
return n+m+a;
}
main()
{
int k;
for(k=0;k<4;k++)
printf("%d,",f(k));
return 0;
}
输出结果是4,6,8,10,

解析里面写的是,每次调用函数时,a的值都是3
既然a是全局变量,那它应该是静态的,所以我觉得a的值应该是3,4,5,6啊,输出结果应该是4,7,10,13,才对啊

a 是全局变量,那么,谁(任何函数)都可以修改它的 值,所以函数 f 对a 的修改有效,即每次 a 都+1。
而函数f 内的 静态变量 n,只允许 函数f 进行修改 ,而 函数f 对n 的修改却是 :n=0;n++;所以,每次 n 都=1,函数 f 的返回值是 n+m+a,n 和a 都清楚了,剩下 形参 m。m 由主函数的 for 提供,从0-3 共 4个值(0,1,2,3),所以,函数 f 最后 返回的 4次值 分别是 1+a,2+a,3+a,4+a。
a 初始化为2,
第一次,a+1后 a=3,返回 的结果为 1+a=4;
第二次,a+1后 a=4,返回 的结果为 2+a=6;
第三次,a+1后 a=5,返回 的结果为 3+a=8;
第四次,a+1后 a=6,返回 的结果为 4+a=10;
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2016-11-04
int a=2;
int f(int m)
{
static int n;
n=0; //这是n每次都变成0了
n++;a++;
//第一次到这里 m=0 n=1 a=3,返回 4
//第二次到这里 m=1 n=1 a=4,返回 6
//第三次到这里 m=2 n=1 a=5,返回 8
//第四次到这里 m=3 n=1 a=6,返回 10
return n+m+a;
}追问

静态变量不是只能在第一次调用的时候赋初值吗?以后每次调用函数的时候不再赋值而是保留上次函数调用结束后的值

追答

static int n=0; //只有在这里定义时,赋值才只做一次,
而你代码中的单独的n=0是一个单独的赋值语句,这句操作,使得这个静态变量每次都变成0了!

追问

也就是说static int n=0是进行初始化,而这个题目里面是进行的赋值吗

追答

是的,你说中了

本回答被提问者采纳
第2个回答  2019-05-07
是。全局变量是被所有子函数所共享的。任何一个子函数中对全局变量值得修改会使得该变量发生改变。
第3个回答  2014-08-12
把 courseName 的声明放到主函数的外面,全局变量的声明是在所有的函数外声明的。
请采纳。追问

int a=2是放在函数外面的啊

相似回答