Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.04.2009, 18:38   #1
lion#1
Новичок
Джуниор
 
Регистрация: 02.04.2009
Сообщений: 2
По умолчанию Область видимости переменых объявленых в цикле for

Здравствуйте, я новичок в C++... Подскажите пожайлуста могу, ли я использовать переменную i объявленную один раз в одном в цикле for, в других циклах, как например здесь:
Код:
...
for (int i = 0; i < arraySize; i++)
		cout << i << setw(10) << a[i] << endl;

	for (int pass = 1; pass < arraySize; pass++)
		for (i = 0; i < arraySize - 1; i++)
			if (a[i] > a[i+1])
			{
				hold = a[i];
				a[i] = a[i+1];
				a[i+1] = hold;
			}


cout << "Sort" << endl;
for (i = 0; i < arraySize; i++)
	cout << i << setw(10) << a[i] << endl;
...
lion#1 вне форума Ответить с цитированием
Старый 02.04.2009, 18:42   #2
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Нет. Переменная, объявленная в цикле будет существовать только в этом цикле.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 02.04.2009, 18:46   #3
lion#1
Новичок
Джуниор
 
Регистрация: 02.04.2009
Сообщений: 2
По умолчанию

Sazary, спасибо за разъяснение.
lion#1 вне форума Ответить с цитированием
Старый 02.04.2009, 19:24   #4
Svetlag
Пользователь
 
Аватар для Svetlag
 
Регистрация: 24.02.2009
Сообщений: 85
По умолчанию

А почему нет, если переменная второй раз используется не внутри цикла for(int i...) как в примере.
Вот так можно
Код:
for(int i=0; i<5; i++)
{};
for(i=0; i<20; i++)
{};
А вот так не стоит
Код:
for(int i=0; i<5; i++)
{
   for(i=0; i<20; i++)
   {};
}
Svetlag вне форума Ответить с цитированием
Старый 02.04.2009, 19:30   #5
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
Сообщение от Svetlag
А почему нет, если переменная второй раз используется не внутри цикла for(int i...) как в примере.
Переменная, объявленная в цикле, является автоматической, и будет удалена при выходе из него.
Компилятор просто выдаст ошибку (неизвестная переменная)
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 02.04.2009, 20:07   #6
Pashan
Пользователь
 
Регистрация: 18.03.2009
Сообщений: 89
По умолчанию

Цитата:
Компилятор просто выдаст ошибку (неизвестная переменная)
Смотря какой компилятор. Современные, скорее всего, действительно выругаются. А вот Visual Studio 6.0 позволяла делать так:
Код:
for(int i=0; i<5; i++)
{};
for(i=0; i<20; i++)
{};
а при таком коде давала ошибку переопределения переменной:
Код:
for(int i=0; i<5; i++)
{};
for(int i=0; i<20; i++)
{};
Pashan вне форума Ответить с цитированием
Старый 02.04.2009, 20:10   #7
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Pashan, ну, VS 6 у меня нет.. Поверю вам на слово.
Но в том и дело, что такого быть не должно. И правильный компилятор, все-таки, выдаст ошибку.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 02.04.2009, 20:19   #8
Blade
Software Engineer
Участник клуба
 
Аватар для Blade
 
Регистрация: 07.04.2007
Сообщений: 1,618
По умолчанию

Причем тут компиляторы? =))
Тут обсуждается язык С++, а не компиляторы
А по стандарту языка, переменная, объявленная в цикле, действует только в его приделах (как говорил Sazary)
А на сколько компилятор соответствует стандарту - это дело его разработчиков
Мужество есть лишь у тех, кто ощутил сердцем страх, кто смотрит в пропасть, но смотрит с гордостью в глазах. (с) Ария
Blade вне форума Ответить с цитированием
Старый 02.04.2009, 20:34   #9
Svetlag
Пользователь
 
Аватар для Svetlag
 
Регистрация: 24.02.2009
Сообщений: 85
По умолчанию

Сорри. Не приходилось сталкиваться с этим. Спасибо за объяснение.
Svetlag вне форума Ответить с цитированием
Старый 03.04.2009, 00:55   #10
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,604
По умолчанию

2Pashan
А зачем после закрывающей фигурной скобки цикла ставить точку с запятой? Насколько я знаю точка с запятой ставится в конце оператора. А for - это блок операторов.
Код:
for(int i=0; i<5; i++)
{}
for(int i=0; i<20; i++)
{}
Вот так будет работать тоже.
MaTBeu вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ограничение видимости скриптам iankov PHP 7 20.02.2009 16:55
область видимости процедур Uli9 Общие вопросы Delphi 16 06.12.2008 21:09
область видимости переменных. С++ Prestigio Помощь студентам 10 07.07.2008 15:55
ошибся с областью видимости ? Иванчо Общие вопросы Delphi 8 25.10.2007 16:35
область видимости ? artem779 Общие вопросы Delphi 3 14.09.2007 09:34