一道C语言的题目

麻烦大家帮忙看一下下边这道题,此题中,开头那个a=5有什么用,那个25是怎么得出来的?形参里的a和实参里的a是一回事吗?解释得越详细越好,谢谢!
以下程序的输出结果是______(正确答案:30 25)
int a=5;
fun (int b)
{ static int a=10;
a+=b++;
printf("%d ",a);}
main()
{ int c=20;
fun(c);
a+=c++;
printf("%d\n",a);}
(

开头那个a=5 指的是全局变量
static int a=10; 这一句是局部的静态变量。
如果在同一个源文件中,外部变量(也叫局部变量)与局部变量同名,则在局部变量的作用范围内,外部变量被“屏蔽”,即它不起作用,此时局部变量是有效的。
在回过头看一下程序:
在mian()函数中,没有与全局变量a同名的局部变量,则在该函数内出现的a的初值都为5,执行a+=c++;即a=a+c++;因为++在后,所以是先运算后加加;a=5+20=25,注意,执行a+=c++;这条语句后,c不再是20,已经是21。
在fun()函数中,由于有声明了与全局函数同名的局部函数a=10;则在该函数内出现的a的初值都为10;再执行 a+=b++;与上面相同,只是在这里a=10罢了。形参b的值为20;所以a=a+b=10+20=30;

我这样说你能明白不??
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-08-08
这是全局变量和局部变量还有静态变量的区别。inta=5是全局变量,当在main函数里调用fun(c)的时候这时候用首先因为静态变量的a=10所以10+20=30输出30。然后就是a+=C++这时候用的是全局变量a=5,所以20+5=25。所以输出为30,25。
第2个回答  2010-08-08
int a=5;
这个定义的是全局变量
如果下面语句没有定义的话,a默认是5
第3个回答  2010-08-08
1. 开头的 a = 5;声明一个全局变量
2. 形参和实参同名没有关系
3. 有一个局部的static变量会屏蔽全局变量,所以输出为30
4. 函数采用的传值方式,所以c的值并没有改变,所以后面又用的全局变量a的值,这样输出为25.

还是自己多看看书吧。码字够累的。。。。
第4个回答  2010-08-08
最前面的那个a是全局变量,fun函数中定义的a只在fun函数中有效,main函数中用的a是全局变量a。

第1个输出是fun函数中的 a=10 a+=b++相当于a=a+b,b=b+1,此时b的值为主程序中传递过来的c的值,所以a=a+b=10+20=30,第一个输出是30。

第2个输出是主程序中的 a+=c++相当于a=a+c,c=c+1,此时a用的是全局变量(就是开头定义的那个int a=5),所以a=a+c=5+20=25,第二个输出是25
第5个回答  2010-08-08
最开头那个A =5是申明A为全局变量, 然后个初值为5;

main里面的A+=C++
可以看作a=a+c;
c++;
所以输出为25;

fun函数里面的
应为定义了一个
static int a=10;
所以外面的A作用域不在FUN函数了
而里面的a+=b++;
这和我上面分析的一样