| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 977 人关注过本帖
标题:关于变量的作用域的问题,谢谢!!
取消只看楼主 加入收藏
Grace_TT
Rank: 1
等 级:新手上路
威 望:1
帖 子:324
专家分:0
注 册:2005-12-21
收藏
 问题点数:0 回复次数:4 
关于变量的作用域的问题,谢谢!!

这个程序,我在visual studio.NET里运行:
#include <iostream>
using namespace std;
void main()
{
const int num=10;
int interval;
int a[num];
for(int i=0;i<num;i++)//第二次将i改为j
a[i]=i+1;//第二次将i改为j
cout<<"please input the interval:";
cin>>interval;
for(int i=0;i<num;i++)//第二次将i改为j
cout<<a[i]<<",";//第二次将i改为j

cout<<endl;
int k=1;
int i=-1;
while(1)
{
for(int j=0;j<interval;)
{
i=(i+1)%num;
if(a[i]!=0)
j++;
}
if(k==num)break;
cout<<a[i]<<",";
a[i]=0;
k++;
}
cout<<"\nNo."<<a[i]<<"boy've won.\n";
}

运行结果:
please input the interval:8
1,2,3,4,5,6,7,8,9,10,
8,0,0,0,0,0,0,0,0,
No.8boy've won.
Press any key to continue

(这个结果是不正确的,编译时出现警告:speed.cpp(22) : warning C4288: 使用了非标准扩展 : “i” : 在 For 循环中声明的循环控制变量用在了 For 循环范围外;它与外部范围内的声明冲突
speed.cpp(17) : 使用“i”的定义
speed.cpp(12) : 忽略“i”的定义)

将程序改一下:


#include <iostream>
using namespace std;
void main()
{
const int num=10;
int interval;
int a[num];
for(int j=0;j<num;j++)
a[j]=j+1;
cout<<"please input the interval:";
cin>>interval;
for(int j=0;j<num;j++)
cout<<a[j]<<",";

cout<<endl;
int k=1;
int i=-1;
while(1)
{
for(int j=0;j<interval;)
{
i=(i+1)%num;
if(a[i]!=0)
j++;
}
if(k==num)break;
cout<<a[i]<<",";
a[i]=0;
k++;
}
cout<<"\nNo."<<a[i]<<"boy've won.\n";
}

运行结果:

please input the interval:8
1,2,3,4,5,6,7,8,9,10,
8,6,5,7,10,3,2,9,4,
No.1boy've won.
Press any key to continue


我记得for语句的第一个表达式中声明的变量,其作用域在该语句内。for语句结束后,在它其间定义的i就应该释放掉了,那么我在for语句结束之后再定义一个i,为什么会产生冲突呢???

盼大侠们给予回答,谢谢!!!

搜索更多相关主题的帖子: 变量 
2005-12-31 10:04
Grace_TT
Rank: 1
等 级:新手上路
威 望:1
帖 子:324
专家分:0
注 册:2005-12-21
收藏
得分:0 
以下是引用柳儿在2005-12-31 16:31:00的发言:
我用borland C++编译了一下,两段代码结果是第
你的意思是说在borland C++中,第一段代码也是没问题的?
2005-12-31 20:56
Grace_TT
Rank: 1
等 级:新手上路
威 望:1
帖 子:324
专家分:0
注 册:2005-12-21
收藏
得分:0 
以下是引用giant在2005-12-31 17:37:00的发言:

你那个for语句是在void main()内,这个for语句定义的自动类变量i的作用域当然就在整个void main()内!

钱能的那本C++中P107页,提到for语句中的变量的作用域在该语句内。

2005-12-31 20:58
Grace_TT
Rank: 1
等 级:新手上路
威 望:1
帖 子:324
专家分:0
注 册:2005-12-21
收藏
得分:0 
哦,这样呀。
不过visual studio.NET 2003 是旧标准吗?
2005-12-31 21:48
Grace_TT
Rank: 1
等 级:新手上路
威 望:1
帖 子:324
专家分:0
注 册:2005-12-21
收藏
得分:0 
以下是引用giant在2005-12-31 21:27:00的发言:

这是个新旧标准的问提,你说的是新表准。

根据最新的 ANSI C++ 规定,在for的初始语句中声明的变量,其作用范围是从它定义的位置开始,一直到for所带语句的作用域结束。而原来老的标准是出了for语句仍然有效,直到for语句外层的局部作用域结束。请看对比:

假设有一for语句,它的外层是一个函数。新老标准规定的不同作用域对比如下:



你采用的是旧标准的编译器,所以你运行程序时就抱错
很多问题要向标准的C++靠拢

嘿嘿,能问一下你这两幅图片是用什么软件编辑的吗?

2005-12-31 21:50
快速回复:关于变量的作用域的问题,谢谢!!
数据加载中...
 
   



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

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