轻木承重:谢谢大家

来源:百度文库 编辑:高考问答 时间:2024/04/30 20:27:21
2下面的程序输出的是
#include<stdio.h>
main() {int k=4,m=3,p;
p=func(k,m);
printf(:%d",p);
p=func(k,m);
printf("%d\n",p);
}
func(a,b)
inta,b;
{static int m =0,i=2;
i+=m+1;
m=i+a+b;
return(m);
}
答案是1021。怎么搞出来的啊 ??

首先,很重要的一点,
不用着急,一步步来.切忌浮燥!

你这个程序,我整理了一下:
#include<stdio.h>
main()
{
int k = 4,m = 3,p;
p = func(k,m); /* 得出p == 10 */
printf(:%d",p); /* 打印10 */
p = func(k,m); /* p = 21 */
printf("%d\n",p); /* 打印21 */
}
func(a,b)
int a,b;
{
static int m = 0,i = 2;
i += m+1; /* 第一次:i = i+(m+1) = 3 */ /* 第二次:i = i+(m+1) = 14 */
m = i+a+b; /* 第一次:m =10 */ /* 第二次:m =21 */
/*
在这里由于 i , m都是static所以的它的生命周期是整个程序的执行时间.虽然它的有效范围只限在这个函数里面.
也就是说static int m = 0,i = 2; 语句它只执行一次.
在调用完第一次的时候,i = 3 ,m = 10
*/
return(m); /* 第一次返回10 */ /* 第二次返回21 */
}

这里面需要注意的是static关键字.