求教!一道C语言题目。

题目如下:
#include <stdio.h>
main()
{int k=4,m=1,p;
p=func(k,m);
printf("%d,",p);
p=func(k,m);
printf("%d\n",p);
}
func(a,b)
int a,b;
{static int m=0,i=2;
i+=m+1;
m=i+a+b;
return(m);
}
为什么第二次运行fun函数时,m的值是1而不是8,第一次运行完fun函数时,m的值不是等于8吗?
.高手们快来求救啊~~~

你主函数里m肯定还是1,func函数中的静态变量应该是8了吧。你查看变量值的位置是什么样的,如果在主函数里查看肯定是主函数中的m,即为1,因为发生作用域覆盖了。你是第二次进入func后设置断点,查看m数值的可定为8。由程序运行结果为8(此时i=3,m=3+1+4,因此返回值为8),17(此时i=3+8(m第二次运行值)+1,m=12+1+4=17,因此返回值为17)也可以看出来。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-11-13
逻辑错误。比如输入25——
第一遍循环结果是top=0,bottom=6,mid=3;
第二遍循环结果是top=0,bottom=2(要找的数就在这个位置),mid=1;
第三遍循环时就没有一个分支是满足条件的,进入了死循环……
一宗逻辑错误的代码再考察它的输出结果是无意义的,考察也是很困难的。
第2个回答  2013-11-13
函数调用是不能改变实参的值得如果想要,可以将m定义为 static int m;
或者定义一个指针用来传递参数。
第3个回答  2013-11-13
m是形式参数,第一次调用fun的时候,并不能改变m的数据
虽然你在func 中将m定义为static,但这仅保证了在func函数内部m的数据仅被初始化一次
但这里定义的m和main()中定义的m是单独的两个变量
你去看看变量的作用域的介绍和函数参数的介绍就知道了
相似回答