И другие программные конструкции

Область действия переменных

Фізіологічна потреба дорослої людини у вітаміні С становить 60-100 мг на добу.

Мы уже знаем, что область действия переменных распространяется на блок кода, в котором они описаны, и на все блоки, непосредственно в него вложенные. Это также применимо и к другим типам блоков, например, к программным конструкциям, использующим ветвление и циклы. Рассмотрим следующую программу:

int i;

for (i = 0; i < 10; i++)

{

string text = “Line” + Convert.ToString(i);

Console.WriteLine(“{0}”, text);

}

Console.WriteLine(“Last text output in loop: {0}”, text);

В данной программе строковая переменная text является локальной для цикла for. Такой код не пройдет компиляцию, поскольку в обращении к Console.WriteLine(), которое происходит вне этого цикла, делается попытка использовать переменную text, область действия которой не распространяется за пределы цикла. Изменим код следующим образом:

int i;

string text;

for (i = 0; i < 10; i++)

{

text = “Line” + Convert.ToString(i);

Console.WriteLine(“{0}”, text);

}

Console.WriteLine(“Last text output in loop: {0}”, text);

Этот код также недопустим. Причина кроется в том, что переменные должны и описываться, и инициализироваться до того, как они будут использоваться, а переменная text инициализируется только в цикле for. Значение, присвоенное переменной text, при выходе из цикла будет утрачено. Однако мы можем модифицировать код еще раз:

int i;

string text = “ ”;

for (i = 0; i < 10; i++)

{

text = “Line” + Convert.ToString(i);

Console.WriteLine(“{0}”, text);

}

Console.WriteLine(“Last text output in loop: {0}”, text);

На этот раз переменная text инициализирована вне цикла, и мы имеем доступ к ее значению. Результат выполнения видно на рисунке

 
 


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

Лучше всего объявлять и инициализировать переменные перед теми блоками кода, в которых они используются. Исключением из этого правила могут быть переменные циклов, объявление которых является составной частью самого цикла. Например:

for (int i = 0; i < 1 0; i + +)

{


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: