解答C++题....

来源:百度知道 编辑:UC知道 时间:2024/06/24 11:20:22
以下程序的输出结果是
#include<iostream>
using namespace std;
int func(int a,int b);
int main()
{
int k=4,m=1,p;
p=func(k,m);
cout<<p<<",";
p=func(k,m);
cout<<p<<endl;
return 0;
}
int func(int a,int b)
{
static int m,i=2;
i+=m+1;
m=i+a+b;
return m;
}

请详细讲解,谢谢!

运行的结果有两个:有可能是随机值,有可能产生运行时错误.
因为在" static int m,i=2; "这句中,m没有被赋初值,后面使用m时,m的值是无法预料的.在比较好的编译器里面,有可能因为上面那句产生运行时错误.

答案为:8和17
只简单说一下,static的变量为静态变量,此变量不会在函数退出后释放内存,也即是说它仍然在下次调用的时候,会保存上一次的值。
静态变量在定义的时候附的初值,只有一次生效.
比如说:
int func(int a,intb)
{
static int m,i=2;

}
中的static int m,i=2; 为给静态变量附初值,此m的初值为0,i的初值为2。
只会在函数的第一次调用时才会给i附初值2,m附初值0,而后面的调用将不会再给i和m附初值。

具体的C++校准是怎样规定的,我不太清楚,但对于VC编译器,静态变量会默认附初值零。我想大多数编译器都是这样处理表态变量的。

8,17

8和17