有关代码块作用域的问题

Golden_Shadow 2011-05-11 08:52:51
首先,在下面的这个代码块中声明了变量 i
	for (int i = 0; i < SIZE; i++)
{
cout << array[i] << " : " ;
cin >> market[i] ;
sum += market[i] ;
}

接下来,在下面的代码块居然还能使用变量 i
	for (i = 0; i < SIZE; i++)
cout << array[i] << " sells " << market[i] << " books\n" ;

我认为第一个代码块结束后,后面的代码块不可以使用变量 i 了,可为什么还是能使用呢?
编译器是 VC 6.0.
...全文
102 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
kolnick 2011-10-10
  • 打赏
  • 举报
回复
不行的!这肯定是你的编译器的问题!
Golden_Shadow 2011-10-10
  • 打赏
  • 举报
回复
摁。VC2005就没这事了。
Golden_Shadow 2011-05-11
  • 打赏
  • 举报
回复
恩...学习了.找新编译器.
tompaz 2011-05-11
  • 打赏
  • 举报
回复
扔掉vc6吧,vs2005以后就没这种扯蛋的事了
碎炎 2011-05-11
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 golden_shadow 的回复:]
下面的,无法通过编译.

C/C++ code
// 5-5-2011-05-11-20.56.cpp -- 第五章第五题
#include <iostream>
#include <string>

const int YEARS = 3 ;
const int MONTHS = 12 ;

int main (void) ;

int main (void)
{……
[/Quote]
编译器的支持标准的问题了
提示了重复初始化 说明第一个声明的i还在生命期里
问题是一样的
Golden_Shadow 2011-05-11
  • 打赏
  • 举报
回复
下面的,无法通过编译.
//	5-5-2011-05-11-20.56.cpp -- 第五章第五题
#include <iostream>
#include <string>

const int YEARS = 3 ;
const int MONTHS = 12 ;

int main (void) ;

int main (void)
{
using namespace std ;
const string months[MONTHS] =
{
"January",
"February",
"March",
"April",
"May",
"June",
"July",
"August",
"September",
"October",
"November",
"December"
} ;
int sales[YEARS][MONTHS] ;
int sum[YEARS] = {0, 0, 0} ;
int total = 0 ;

for (int i = 0; i < YEARS; i++) // see declaration of 'i'
{
cout << "A new year :\n" ;
for (int j = 0; j < MONTHS; j++)
{
cout << months[j] << " : " ;
cin >> sales[i][j] ;
sum[i] += sales[i][j] ;
}
}
cout << "First year sales : " << sum[0] << endl ;
cout << "Second year sales : " << sum[1] << endl ;
cout << "Third year sales : " << sum[2] << endl ;
for (int i = 0; i < YEARS; i++) // error C2374: 'i' : redefinition; multiple initialization
total += sum[i] ;
cout << "Total is : " << total << endl ;

return 0 ;
}
Golden_Shadow 2011-05-11
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 sryan 的回复:]
你写的程序的代码块就是for语句 所以i的生命期就是for语句 出了for语句i就无效了
换个ide吧 至少vs2005啊
[/Quote]
考虑换了.
碎炎 2011-05-11
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 golden_shadow 的回复:]
我马上写下一个了,试完了之后来说下.一样的问题.
[/Quote]
你写的程序的代码块就是for语句 所以i的生命期就是for语句 出了for语句i就无效了
换个ide吧 至少vs2005啊
Golden_Shadow 2011-05-11
  • 打赏
  • 举报
回复
我马上写下一个了,试完了之后来说下.一样的问题.
Golden_Shadow 2011-05-11
  • 打赏
  • 举报
回复
我看的是<<C++ Primer Plus>>.说的是,变量的寿命从代码块开始到代码块的结束.到底是编译器的问题,还是我理解的问题?继续关注...
碎炎 2011-05-11
  • 打赏
  • 举报
回复
不可能的 lz是不是在外围定义了i变量啊 或者有全局的i变量
不然i只能在定义的for语句中有效 其它无效 我特地把ls的代码运行了一下 不行的
jernymy 2011-05-11
  • 打赏
  • 举报
回复

#include "stdio.h"

int main()
{
// jernymy 此处定义了i,则i的作用范围是从此处到函数结束
for (int i = 0; i < 10; i++)
{
printf("\n");
}

for (i = 0; i < 10; i++)
{
printf("%d\n", i);
}
// i的作用范围到这里
return 0;
}
delphiwcdj 2011-05-11
  • 打赏
  • 举报
回复
vc6对标准支持不好,vs2008下就报错了

64,647

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧