| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 556 人关注过本帖
标题:c++问题
只看楼主 加入收藏
wukaiye
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2012-8-12
结帖率:0
收藏
已结贴  问题点数:20 回复次数:4 
c++问题
以下程序的运行结果是
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,求高人指点
2012-10-03 10:25
寒风中的细雨
Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17
等 级:贵宾
威 望:66
帖 子:1710
专家分:8645
注 册:2009-9-15
收藏
得分:5 
试着编译 运行  再不行就调试单步执行
2012-10-03 12:54
zhaojigao
Rank: 2
等 级:论坛游民
威 望:1
帖 子:19
专家分:59
注 册:2012-9-6
收藏
得分:5 
首先 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;
 }

2012-10-03 15:53
额外覆盖
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:城市猎人
威 望:6
帖 子:1726
专家分:5757
注 册:2012-9-22
收藏
得分:5 
受教了

我现在所学的一切都是为了游戏!!!为了游戏,加油!加油!努力!
2012-10-04 18:22
jiangruixue
Rank: 1
等 级:新手上路
帖 子:6
专家分:5
注 册:2012-10-5
收藏
得分:5 
静态局部变量 m,i在数据段开辟了空间,当调用完fun()时栈消失,但是在数据段中的m,i的值仍然不会发生变化,所以在你再次调用fun()时,就会出现A中的结果。
2012-10-05 14:07
快速回复:c++问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.032618 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved