函数定义
int func( )
{ static int m=0;
return m++;
}
则下列程序段输出为(?)
int i;
for(i=1;i<=4;i++)
func( );
printf("%d",func( ));
题目答案是4,但是求解为什么是4?
static变量
static声明的变量为“静态局部变量”,变量内容具有持久性。
该局部变量的值在函数调用结束之后不会消失,而仍然保留其原值。即它所占用的存储单元不释放,在下一次调用该函数时,其局部变量的值仍然存在,也就是上一次函数调用结束时的值。
return m++
前置++是用之前就加1,用的人拿到的一定是新值;后置++是用完之后才加1,用的人拿到的是旧值.
m++中的加法确实做了,而且是在return之前做的,只不过返回值早就保存好了,而且是m在执行加法之前的值
综述:
第1次:返回0,m变成1
第2次:返回1,m变成2
第3次:返回2,m变成3
第4次:返回3,m变成4
第5次:返回4,m变成5
望采纳
追问它这个for(i=1;i<=4;i++)中不是只输出4次吗?输出i的值分别是1、2、3、4,第5次是哪里来的?
追答我上面的图是为了解释原理而已。
根据你的代码
仔细看:func函数和打印函数没有用大括号括起来
前面for循环是执行4次了但是不打印,
而且是返回:0 1 2 3,好好看回答
printf("%d",func( ));这个语句执行第5次,返回4.并打印