- •Int main()
- •Int main() {
- •Int main ()
- •Int main()
- •Использование функций в выражениях
- •Int main()
- •Правила действия областей видимости функций
- •Локальная область видимости
- •Void f1() ;
- •Int main() {
- •Void f1 ()
- •Void f( ) ;
- •Int main( )
- •Void f()
- •Локальные переменные можно объявлять внутри любого блока
- •Int main() {
- •Int main( )
- •Сокрытие имен переменных
- •Int main ()
- •Параметры функции
- •Глобальная область видимости
- •Int main ()
- •Int main ()
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>