C语言问题,麻烦解释下,为什么答案算出来是1,3不是3,1啊?

main(){inti,m,n;for(i=0;i<3;i++){m=test1();n=test2();}printf("%d,%d\n",m,n);}test1(){... main()
{
int i,m,n;
for(i=0;i<3;i++)
{
m=test1();
n=test2();
}
printf("%d,%d\n",m,n);
}
test1()
{
int x=0;
x++
;return x;
}
test2()
{
static int x=0;
x++;
return x;
}
展开
 我来答
风若远去何人留
2015-12-11 · 知道合伙人互联网行家
风若远去何人留
知道合伙人互联网行家
采纳数:20412 获赞数:450104
专业C/C++软件开发

向TA提问 私信TA
展开全部
test1和test2的区别 就在于 局部变量x是否有static .
带static 的变量,只初始化一次 下次进入函数的时候,x值是上次退出的值。
而不带的,每次都是初始化值。

于是
test1每次进入,x都是0,然后自加为1,返回值始终为1,所以m值最终也就是1
test2每次进入,x是上次值,然后自加1.于是第一次调返回1,第二次调返回2,第三次返回3,最终m值为3.
追问
不是带有static的变量,每次都会初始化吗?
有点乱了,记得以前做的一道循环的题是带有static的变量,每次循环的时候都是初始化值
追答
反了。
带static的不是每次初始化 而是不带static的 才是每次初始化。。。
huangxinzbz
推荐于2016-08-07 · TA获得超过589个赞
知道小有建树答主
回答量:266
采纳率:100%
帮助的人:332万
展开全部
main()
{
int i,m,n;
for(i=0;i<3;i++)/*循环3次*/
{
m=test1();/*1.m=1; 2.m=1; 3.m=1*/
n=test2();/*1.n=1; 2.n=2; 3.n=3*/
}
printf("%d,%d\n",m,n);/*printf 后是1,3*/
}

test1()
{
int x=0; /*局步变量,函数执行完内存被放*/
x++ /*递增加1*/
;return x;/*每次调用都是return 1*/
}

test2()
{
static int x=0;/*静态变量,函数执行完内存保留*/
x++;/*递增加1*/
return x;/*调用N次就是return N*/
}
追问
函数中的静态变量和循环中的静态变量是不一样的吗?
追答
静态变量不是你说的函数中的或是循环中的,它有它的作用域

比如你的test2函数里面的静态变量x的作用器就是在test2里面,如果在main函数里有一个就是作用在main函数里

如果有一静态变量它定义在外部,它的作用域就在整个文件里都有

它不是你理解成的test2函数中每次初始化为0
static int x=0;这个的意思是声明局部静态变量,声明值为0,下一次进来就不会变0了
如果是如下语句
static int x;
x=0; 这是赋值语句,不是开头的声明

就如你的理解了
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
天雨下凡
2015-12-11 · 知道合伙人教育行家
天雨下凡
知道合伙人教育行家
采纳数:17564 获赞数:65142
爱电脑、爱数学、爱音乐; 熟悉VB、C/C++、JAVA; EXCEL与VBA有所研究…… 数学,一些会,一些被忘却……

向TA提问 私信TA
展开全部
test1()里面的x是自动变量,每次调用都会变成0,不会保留以前的值
test2()里面的x是静态变量,会保存之前调用的结果。
所以m=test1()执行3次,结果还是1
而n=test2()执行3次,变成1+1+1=3
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式