注册 登录
编程论坛 C++教室

c++问题

wukaiye 发布于 2012-10-03 10:25, 556 次点击
以下程序的运行结果是
int main()
{ int k=4,m=1,p;
p=func(k,m);
cout<<p<<endl;
p=func(k,m);
cout<<p<<endl;
}
func(int a,int b)
{ static int m,i=2;
i+=m+1;
m=i+a+b;
return(m);
}
 
 
  A.  8,17  
  B.  8,16  
  C.  8,20  
  D.  8,8  
为什么这道题的正确答案是A,求高人指点
4 回复
#2
寒风中的细雨2012-10-03 12:54
试着编译 运行  再不行就调试单步执行
#3
zhaojigao2012-10-03 15:53
首先 static 变量在建立是就默认初始化为 0 所以在func函数第一次调用中 第一条语句 i+=m+1; 之后i=3,m=0;m=i+a+b;之后 m等于8 而且由于m。i是静态变量在函数退出时不退出 所以在第二次调用func函数的时候 m的初始值为 8 i为3; i+=m+1;之后 i为12 m为8  m=i+a+b;之后m为17 返回的就是17了 所以就是A啊


# include <iostream>
using namespace std;

 func(int a,int b)
 {
     static int m,i=2;
     cout<<m<<endl;
     i+=m+1;
     cout<<i<<"  "<<m<<endl;
     m=i+a+b;
     return m;
 }

int main()
 {
    int k=4,m=1,p;
    p=func(k,m);
    cout<<p<<endl;
    p=func(k,m);
    cout<<p<<endl;
    return 0;
 }

#4
额外覆盖2012-10-04 18:22
受教了
#5
jiangruixue2012-10-05 14:07
静态局部变量 m,i在数据段开辟了空间,当调用完fun()时栈消失,但是在数据段中的m,i的值仍然不会发生变化,所以在你再次调用fun()时,就会出现A中的结果。
1