作业帮 > 综合 > 作业

C++题目不懂 #includeint func(int a,int b){static int m,i=2;i+=m+

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/05/17 03:41:01
C++题目不懂
#include
int func(int a,int b)
{static int m,i=2;
i+=m+1;
m=i+a+b;
return m;
}
void main(void)
{int k=4,m=1,p;
p=func(k,m);
cout
你没有理解的原因在于static int m,i=2;
这句话里面,m没有赋初始值,而m是静态变量,所以默认m=0.
因此第一次执行p=func(k,m);
i=2+(0+1)=3;m=3+4+1=8;输出8;
第二次执行p=func(k,m);
i=3+(8+1)=12,m=12+4+1=17,输出17
再问: 第一次执行函数func,但是函数的反悔值不会改变实参的值,所以第二次执行m不还是1吗,怎么就变成8了呢
再答: 你要明白,静态变量的意思,static int m,i; 意思是说m和i位于程序运行的全局静态变量区,也就是说在程序运行期间,任何使用m,i的语句都共享m,i;所以你第一次执行函数func时,m变成8了,第二次执行前,m还是8。