帮忙解释下这个程序

来源:百度知道 编辑:UC知道 时间:2024/05/18 08:00:33
int d=1;
fun(intp)
{ static int d=5;
d+=p;
printf("%d",d);
return(d);
}
main()
{int a=3;printf("%d\n",fun(a+fun(d)));}
A.6 9 9 B.6 6 9 C.6 15 15 D.6 6 15

首先调用fun(d)函数,打印出 6
在调用fun(a+fun(d))函数,打印出 15
最后打印 15

让我直观的说一下吧:
第一次fun(d)调用时把全局变量d=1传给fun函数,此时局部静态变量屏蔽了全局变量,执行d+=p后d=6,打印出来,并返回6;
第二次调用fun(a+fun(d))时传递的参数是3+6=9,fun中由于d是静态变量,故不被重新赋值而保留上一次值6,d+=p后d=15,打印出来,并返回15;
fun(a+fun(d)))执行结束后,值是15,在主函数中打印出来;
所以最后结果是:61515