C语言!!急!!在线等

来源:百度知道 编辑:UC知道 时间:2024/05/26 08:13:01
#include<stdio.h>
fun(int x,int y)
{static int m=0,i=2;
i+=m+1;
m=i+x+y;
return m;
}
main()
{int j=1,m=1,k;
k=fun(j,m);
printf("%d,",k);
k=fun(j,m);
printf("%d\n",k);
}
这个程序的输出结果为什么是5,11啊
主要解释后面的11

static 定义了静态变量
在函数内部的m,i与main中的j m无关。
第一次:
i=2+0+1=3;
m最后是5;
由于是静态变量
第二次调用时。i m还是3和5,而不会执行static int m=0,i=2; 这个定义语句。
i=i+m+1=3+5+1=9;
m=i+x+y=9+1+1=11;

由于static是静态局部变量,你第二次利用fun()函数时,这时的m和i的值为你第一次被调用后保留下的值。
即:第二次调用初始:i=3,m=5,
则运行i+=m+1后,i=3+5+1=9,
所以m=9+1+1=11~~
不知道你明白了没有?

第二次里面的i=3,m=5,i+=m+1,之后i的值为9,再m=i+x+y就为11了