| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 623 人关注过本帖
标题:急求解一道C++题
只看楼主 加入收藏
jy5599
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2006-2-28
收藏
 问题点数:0 回复次数:5 
急求解一道C++题

#include<iostream.h>
void func();

int n=1;
void main()
{
static int x=5;
int y;
y=n;
cout<<"Main--x="<<x
<<",y="<<y
<<",n="<<n<<endl;
func();
cout<<"Main--x="<<x
<<",y="<<y
<<",n="<<n<<endl;
func();
}
void func()
{
static int x=4;
int y=10;
x+=2;
n+=10;
y+=n;
cout<<"Func--x="<<x
<<",y="<<y
<<",n="<<n<<endl;
}

请高手帮我解释一下这道题目可以吗,最后正确输入结果如下:

Main--x=5,y=1,n=1

Func--x=6,y=21,n=11

Main--x=5,y=1,n=11

Func--x=8,y=31,n=21

搜索更多相关主题的帖子: 求解 
2006-02-28 17:17
DarkHero
Rank: 1
等 级:新手上路
威 望:2
帖 子:191
专家分:0
注 册:2006-1-14
收藏
得分:0 

提示:
n 是全局变量,没啥说的;
main与f中的x,y都不同,y就是普通的局部变量,没啥说的;
关键就是f()中的x,因为是static,保存在静态储存区,所以初始时是4,以后x+=2,x就变为6了,不会随着f()调用的结束而消亡。


for( ; me.alive() ; ) { 淡泊名利,志存高远 } //Forever
2006-02-28 21:11
jdytz
Rank: 2
等 级:新手上路
威 望:3
帖 子:104
专家分:0
注 册:2005-4-24
收藏
得分:0 

这道题考察局部变量和全局变量的调用问题
第一次cout n调用n=1,x调用x=5
第二次 n仍然调用n=1,把函数func看作一个域
第三次 x,y调用的值是在main区域的值不变 但是n并不是main区域声明的 所以n的值调用func函数运行 过后的值
第四次 x属性static决定x值不随函数的结束而清除,y的值取决于n,n就不用说了吧


``` 奔放潇洒活着我的自由
2006-02-28 21:37
师妃暄
Rank: 6Rank: 6
等 级:贵宾
威 望:27
帖 子:805
专家分:107
注 册:2006-3-1
收藏
得分:0 
关键就是static声明的x值是静态局部变量

它储存在堆中,不会随着函数的消失而消失。

有实力才会有魅力 实力来自坚持不懈的努力
2006-03-01 17:56
三¥叶¥虫
Rank: 1
等 级:新手上路
帖 子:31
专家分:0
注 册:2006-3-1
收藏
得分:0 
在一个函数中 由 static 定义的变量
在调用该函数后变量的值会变成该变量运算的结果
如:void ll()
{static int x=9;
x=10;}
在下一次调用ll()函数时 x的值就是10。

2006-03-01 23:21
GISboy
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2006-2-28
收藏
得分:0 
[QUOTE]

关键就是static声明的x值是静态局部变量

它储存在堆中,不会随着函数的消失而消失。

[/QUOTE]
它不是存储在堆中,而是在全局数据区,堆区是在程序运行中动态分配的!

2006-03-05 13:21
快速回复:急求解一道C++题
数据加载中...
 
   



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

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