一道C语言的题,求讲解

来源:百度知道 编辑:UC知道 时间:2024/05/15 18:31:31
#include "stdio.h"
int fun(int m)
{
static int t=3;
m+=t++;
return(m);
}
main()
{
int m=2,i,j=0;
for (i=0;i<2;i++)
j+=fun(m++);
printf("%d\n",j);
}

题目就是这样了,我不明白为什么输出的结果会是12呢,哪位朋友能帮忙讲解一下呢?谢谢啦

***********************题目~~好!!!*************************
*********************看我!!!详细分析***********************

问题关键:
1.子函数里定义的变量与子函数调用过程的关系;
子函数里定义的变量(不是static型的),在子函数调用时建立,定义并分配,当子函数调用结束时,它也消失,没有了分配给它的内存空间;
只有在下一次调用时,重新定义并分配,以及重新初始化.

2.子函数里,static所定义的变量,在函数第一次调用的时候定义,并获得分配空间,以及初值(当有的时候),在函数调用结束,子函数消亡了,但是static定义的函数仍然存在,也就是说它仍然保持着它分配到的存储空间,并保存着子函数结束时它当时的值.也就是说static所定义的变量的生命周期为定义到main函数结束为止.
那么子函数里static定义的变量,在什么时候消失呢???
是在main函数运行结束时,随main函数一起消亡.
当main函数第二次调用static所定义的变量所在的子函数时,static所定义的变量,没有重新定义,也没有重新赋予初值了.如果第一次结束时变量的值为3,第二次开始时,值就是3.并以此值参与运算.
3.子函数外与子函数内同名的变量,除了可能存在参数传递的方式外,此外他们之间互不影响,子函数内的变量不会改变子函数外与它同名的变量的值,同样,若子函数外的变量不以参数的方式传递值给子函数内定义的同名变量,它们之间就没有任何关系了!!!!!!!!!!!!!!!!!!

现在看题目:

i=0 ;第一次调用fun时,传近来参数m=2(注意这里,m属于子函数外的变量了,m++中加1的效果是在return返回后,也就是子函数结束时),定义static变量t,赋初值3.执行m+=t++;
这句的可用下面二句来代替:
m=m+1; (也就是m=2+3==5)
t=t+1;
最后m=5;t=4;
最后返回m=4;(但子函数外的值仍是2,因为子函数里m是在函数参数里定义的,是子