有关c语言中静态变量的题目,求解题全过程和答案

fun(int a)
{
int b=4
static int c
b++;c++:
return (a+b+c)
}
void main()
{
int a=2,c=3
printf("%d,%d,%",fun(c),fun(a),fun(fun(c)))
}

输出为12,10,16。C语言的压栈顺序是从右到左,因此fun(fun(c))最先执行,fun(c)最后执行。fun(fun(3))先求里面的fun(3),返回值为3+5+1=9,此时静态变量c=1,fun(9)返回值为9+5+2=16,静态变量c=2;fun(2)返回值为2+5+3=10,静态变量c=3;fun(3)返回值为3+5+4=12,静态变量c=4。
楼上的把C语言的压栈顺序搞反了吧?
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-08-12
fun()函数中b是临时变量,每次调用函数都会重新定义,所以执行到return语句的时候b的值永远为5;c是静态变量,在程序初始化时分配空间,直到程序结束才释放,所以c只被定义一次,每次调用fun()其值就会加1;
printf("%d,%d,%d",fun(c),fun(a),fun(fun(c)))从左往右依次执行,又因为调用函数需要先确定其参数,所以执行顺序为:
fun(3):3+5+1=9;
fun(2):2+5+2=9;
fun(3):3+5+3=11;
fun(11):11+5+4=20;
运行结果为:
9,9,20本回答被网友采纳
第2个回答  2012-08-12
注意fun函数的c是静态的,不同于main中的c。其实你也就是主要分析变量的作用域和生命域。每次调用fun函数时c都会自加1,而其b的值在调用完后会复原。详细点就是static int c和int b所存储的位置不同
相似回答