求解下面的C语言题目~~求高手指点!!! 是关于静态变量的

int a,b,c;
void f(int a)
{static int c;a=a+3;b=b+3;c=c+3;printf"a=%d,b=%d,c=%d",a,b,c);}
void main()
{a=b=c=3;f(a);f(b);f(c);}
想问一下运行结果是什么~

a=6,b=6,c=3
a=9,b=9,c=6
a=6,b=12,c=9
此题主要考虑变量的作用域。全局变量a、b、c在全局生效,但遇到局部函数中相同名称的变量时,函数内的变量作用域优先级较高。

main函数执行f(a)时,f函数内,c静态变量是一个单独的全局变量,作用域在f函数内,拥有独立的全局内存地址。c此时的初值为0。f(b)执行时,f函数内输入a为传入的变量b。f(b)执行后,主函数中传入的c是全局变量c,注意整个程序中c的值仍是初始化的3,f函数中改变的另一个c(静态变量)。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-07-07
感觉在编译阶段就通不过吧。
1. 函数f只有一个形参a,函数体内变量B没有声明,静态变量C没有初始化。
2.main函数虽然有变量A,B,C但是是main的局部变量,你只是将a通过值传递给了f 函数,但B和C在f函数中是不可见的。

建议:
1. 复习下形参和实参的区别
2. static声明变量的位置不同 ,作用域是不一样的。

不好意思 没注意看 abc是全局变量。
传f(a)时 结果是6 6 3 (在函数f内 声明的C会覆盖全局的C)
传f(b)时 结果 9 9 6

传f(c)时 结果 6 12 9

从代码规范上讲,f 函数中的静态变量C 应初始化为0。