求教!一道C语言题目。

题目如下:#include<stdio.h>main(){intk=4,m=1,p;p=func(k,m);printf("%d,",p);p=func(k,m);pri... 题目如下:
#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吗?
.高手们快来求救啊~~~
展开
 我来答
storm20082011
2013-11-14 · 超过17用户采纳过TA的回答
知道答主
回答量:42
采纳率:0%
帮助的人:46.2万
展开全部
你主函数里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)也可以看出来。
White_MouseYBZ
2013-11-13 · TA获得超过4万个赞
知道大有可为答主
回答量:2.1万
采纳率:82%
帮助的人:6384万
展开全部
逻辑错误。比如输入25——
第一遍循环结果是top=0,bottom=6,mid=3;
第二遍循环结果是top=0,bottom=2(要找的数就在这个位置),mid=1;
第三遍循环时就没有一个分支是满足条件的,进入了死循环……
一宗逻辑错误的代码再考察它的输出结果是无意义的,考察也是很困难的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友0e661f5
2013-11-13 · 超过10用户采纳过TA的回答
知道答主
回答量:61
采纳率:0%
帮助的人:26.9万
展开全部
函数调用是不能改变实参的值得如果想要,可以将m定义为 static int m;
或者定义一个指针用来传递参数。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友413538b
2013-11-13 · 超过10用户采纳过TA的回答
知道答主
回答量:39
采纳率:0%
帮助的人:25.3万
展开全部
m是形式参数,第一次调用fun的时候,并不能改变m的数据
虽然你在func 中将m定义为static,但这仅保证了在func函数内部m的数据仅被初始化一次
但这里定义的m和main()中定义的m是单独的两个变量
你去看看变量的作用域的介绍和函数参数的介绍就知道了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式