遇蛇全文番外txt百度云:高手帮忙看一下这个程序

来源:百度文库 编辑:高考问答 时间:2024/04/30 10:46:35
#include <stdio.h>
int f(int m)
{static int x[3]={2,3,4};
int i;
for(i=0;i<3;i++)
x[i]+=x[i]-m;
for(i=0;i<3;i++)
printf("%d\n",x[i]);
printf("\n");
return(x[m]);
}
void main()
{int y=1;
f(f(y));
}
在第一次和第二次调用f函数后的结果是什么呢?
能帮忙讲讲为什么吗,详细一点就更好了

3
5
7
1
5
9
是这样的,用static声明的局部变量在函数调用后不消失而保留原值在下一次调用时其值为上一次函数调用结束的值.第一次调用结束时x[0]=3,x[1]=5,x[2]=7,由于它是静态局部变量,调用结束后它并不释放仍保留3,5,7.所以第二次结果为1,5,9
如果仍不明白可参考C程序设计(第二版)(清华大学出版社)173--174页

输出结果为
3
5
7

1
5
9

第一次调用f()函数,
即f(1)
x[0]=3
x[1]=5
x[2]=7
返回值为x[1]=5
第二次调用时为f(5)
x[]为静态数组,值不变
x[0]=1
x[1]=5
x[2]=9
返回值为x[5]=系统存储x数组的第二个单元的值

谢谢PRINCESSPRINCE的提醒哦.
呵呵.

这就是静态变量static的用法啊

3
5
7

1
5
9

3,5,7
1,5,9