Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Электронный конспект лекций (семестр 1).doc
Скачиваний:
30
Добавлен:
29.02.2016
Размер:
321.02 Кб
Скачать
    1. Выход из функции

Имеется два способа окончания работы функции и возврата управления в точку вызова. Первый способ, применимый к функциям типа void, предполагает выполнение последнего оператора функции, после чего работа функции заканчивается.

Второй, более универсальный способ, состоит в использовании оператора return.

Оператор returnимеет два назначения: во-первых, немедленный выход из функции, во-вторых, возврат значения в точку вызова. Функция может иметь несколько операторовreturn, то есть точек выхода из функции может быть несколько.

В функциях, возвращающих значение, оператор return связан со значением выражения, например:

return 0; // возвращается значение константы

В функциях, не возвращающих значения (имеющих тип void), может использоваться операторreturn, не связанный с каким-либо выражением:

return; // осуществляется выход из функции

    1. Организация памяти при выполнении программы

Исполнимый файл программы загружается для выполнения в основную (оперативную) память компьютера. При этом доступная программе память разделяется на четыре области (сегмента). Одна из этих областей отводится под программный код, вторая – под глобальные и статические (объявленные как static) данные программы, третья, организованная по принципустека, – под локальные переменные ее функций, четвертая – это область динамической памяти, “куча” (heap), которая может быть использована для работы с данными, размер или необходимость которых заранее неизвестны.

Любое объявление переменной в программе предполагает резервирование для нее участка памяти компьютера. Память под глобальные и статические переменные программы резервируется в области данных на все время выполнения программы, под формальные параметры и локальные переменные функции – в стеке на время выполнения этой функции. Количество резервируемых байтов памяти определяется типом данных, указанным в объявлении. Байты памяти компьютера пронумерованы, номера этих байтов принято называть адресами, номер начального байта участка памяти, выделенного для переменной, –адресомпеременной.

    1. Правила видимости имен для функций

Правила видимости именопределяют, какие имена “видны” в каждой конкретной точке программы. Каждая функция имеет своюобласть видимости.

Переменные, определенные вне функций – глобальныепеременные, они “видны” во всех функциях программы, расположенных после объявления таких переменных. Переменные эти “живут” столько, сколько и сама программа.

int x; // глобальная переменная

void fn (int a)

{

x = a * a; // изменение значения глобальной переменной x

cout << x;

}

int main ()

{

...

fn (10);

cout << x; // использование значения глобальной переменной x

...

}

Переменные, объявленные внутри функции, называются локальнымипеременными, они “видны” только в данной функции. Локальные переменные создаются при входе в функцию и уничтожаются при выходе из нее. Поэтому локальные переменные не могут сохранять значения между вызовами функций. Единственным исключением из этого правила являются переменные, объявленные со спецификаторомstatic. Он заставляет компилятор воспринимать данную переменную как глобальную, хотя область видимости по-прежнему ограничена функцией.

Формальные параметры функции (переменные, получающие значения, указанные при вызове этой функции) ведут себя так же, как и обычные локальные переменные, то есть создаются при входе в функцию и уничтожаются при выходе из нее.

Различные функции могут использовать одни и те же имена локальных переменных и формальных параметров.

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

Поскольку в C++ не допускается определение функции внутри другой функции, все функции находятся на одном уровне видимости. В каждой функции известна и может быть вызвана любая объявленная ранее (посредством прототипа или определения) функция.