Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Функции.doc
Скачиваний:
1
Добавлен:
17.11.2019
Размер:
103.42 Кб
Скачать

Void f1() ;

Int main() {

int val = 10; // val локальна по отношению к main()

сout << "Значение переменной val в функции main():"

<< val << '\n' ;

f1();

cout << "Значение переменной val в функции main(): "

<< val << '\n' ;

return 0;

}

Void f1 ()

{ int val = 88 // val локальна по отношению к f1()

cout << "Значение переменной val в функции fl():"

<< val << '\n'; }

Вот результаты выполнения этой программы.

Значение переменной val в функции main(): 10

Значение переменной val в функции f1(): 88

Значение переменной val в функции main(): 10

Переменная val, объ­явленная в функции main(), не имеет никакого отношения к одноименной пере­менной из функции f1().Каждая переменная (в данном случае val) известна только блоку кода, в котором она объявлена. Несмотря на то, что при выполнении функции f1() переменная val устанавли­вается равной числу 88, значение переменной val в функции main() остается равным 10.

Поскольку локальные переменные создаются с каждым входом и разрушают­ся с каждым выходом из программного блока, в котором они объявлены, они не хранят своих значений между активизациями блоков. Это особенно важно пом­нить в отношении функций. При вызове функции ее локальные переменные соз­даются, а при выходе из нее — разрушаются, т.е. локальные пере­менные не сохраняют своих значений между вызовами функций.

Если объявление локальной переменной включает инициализатор, то такая переменная инициализируется при каждом входе в соответствующий блок.

Рас­смотрим пример.

/* Локальная переменная инициализируется при каждом входе в "свой" блок. */

#include <iostream>

Void f( ) ;

Int main( )

{ for (int i = 0; i<3; i++) f();

return 0; }

// Переменная num инициализируется при каждом вызове функции f()

Void f()

{

int num = 99; // При каждом вызове функции f()

// переменная num устанавливается равной 99

cout <<num<< '\n';

num++; // Это действие не имеет устойчивого эффекта.

}

Результаты выполнения этой программы подтверждают тот факт, что пере­менная num заново устанавливается при каждом вызове функции f ().

99

99

99

Содержимое неинициализированной локальной переменной будет неизвест­но до тех пор, пока ей не будет присвоено некоторое значение.

Локальные переменные можно объявлять внутри любого блока

Рассмотрим следующую программу.

//Переменные могут быть локальными по отношению к блоку

#include <iostream>

Int main() {

int x = 19; //Переменная х известна всему коду функции

if(x==19) {

int у = 20; // Переменная у локальна для if-блока

cout << "х + у равно " << х + у << "\n";

}

// у = 100; // Ошибка! Переменная у здесь неизвестна

return 0; }

Переменная х объявляется в начале области видимости функции main() и доступна для всего последующего кода этой функции. В блоке if-ин­струкции объявляется переменная у. Поскольку рамками блока и определяется область видимости, переменная у видима только для кода внутри этого блока.

Поэтому строка у=100; (она находится за пределами этого блока) отмечена как комментарий. Если убрать символ комментария (//) в начале этой строки, компилятор отреагирует сообщением об ошибке, поскольку переменная у невидима вне этого блока. Вну­три if-блока вполне можно использовать переменную х, поскольку код в рамках блока имеет доступ к переменным, объявленным во включающем блоке.

Локальная переменная может быть объявлена в любом месте блока кода — главное, чтобы это произошло до ее использования.

Например.

#include <iostream>