搜索
编程论坛
→
开发语言
→
C++论坛
→
『 C++教室 』
→ c++问题
标题:
c++问题
只看楼主
wukaiye
等 级:
新手上路
帖 子: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
寒风中的细雨
等 级:
贵宾
威 望:
66
帖 子:1710
专家分:8645
注 册:2009-9-15
第
2
楼
得分:5
试着编译 运行 再不行就调试单步执行
2012-10-03 12:54
zhaojigao
等 级:
论坛游民
威 望:
1
帖 子:19
专家分:59
注 册:2012-9-6
第
3
楼
得分: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
额外覆盖
等 级:
城市猎人
威 望:
6
帖 子:1726
专家分:5757
注 册:2012-9-22
第
4
楼
得分:5
受教了
我现在所学的一切都是为了游戏!!!为了游戏,加油!加油!努力!
2012-10-04 18:22
jiangruixue
等 级:
新手上路
帖 子:6
专家分:5
注 册:2012-10-5
第
5
楼
得分:5
静态局部变量 m,i在数据段开辟了空间,当调用完fun()时栈消失,但是在数据段中的m,i的值仍然不会发生变化,所以在你再次调用fun()时,就会出现A中的结果。
2012-10-05 14:07
5
1/1页
1
参与讨论请移步原网站贴子:
https://bbs.bccn.net/thread-382475-1-1.html
关于我们
|
广告合作
|
编程中国
|
清除Cookies
|
TOP
|
手机版
编程中国
版权所有,并保留所有权利。
Powered by
Discuz
, Processed in 0.129274 second(s), 8 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved