C语言简单习题:auto int b=0 。。。。

#include <stdio.h>
int f (int a)
{ auto int b=0 ;
static int c=1 ;
b++ ;
c+=3 ;
return(a+b+c) ;
}
void main( )
{ int a=5 , I ;
for(I=0 ; I<3 ; I++)
printf("%4d", f(a)) ;
}
最后输出是什么?请解释原因。

auto声明后,每次调用这个函数都会将这个b重定义为0;

而进行stable声明后,c将不会被改变,所以值是不同的;

第一次循环:

a=5(这个是固定的);

b=0+1=1(自增运算符);

c=1+3=4;

返回一个值并输出a+b+c=10;


第二次循环:

a=5;

b=0+1=2(在这里重置);

c=4+3=7(而它并没有);

a+b+c=13;


第三次循环也是一样的,b重置,c加3,而a为定值5,所以三次输出相差3,就是c的三次加3,和b无关。


纯手打,求采纳,有问题,继续问

温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-06-19
因为 static int c=1 ; c 的值 相当全局量,函数退出后,它的当前值继续有效并保留着。
所以:
(循环1):
b=0; b=b+1=1;
c=1; c=c+3=4
a+b+c=5+1+4
(循环2):
c=4;c=c+3=7;
a+b+c=5+1+7=13;
(循环3):
c=7;c=c+3=10
a+b+c=5+1+10=16
==
输出:
10 13 16本回答被网友采纳