Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛР13-С++17-мая-2012.doc
Скачиваний:
13
Добавлен:
15.09.2019
Размер:
1.3 Mб
Скачать

1.6.4. Передача параметров по указателю

Так же как и при передаче параметров по ссылке, в данном способе используется не значение соответствующей переменной, а ее адрес. Отличие от предыдущего способа состоит в том, что используется операция косвенной адресации (*).

Пример 13.17

Поменять местами значения двух переменных x и y

void Swap_Ptr (double *a, double *b)

{

double tmp= *a;

*a = *b;

*b = tmp;

}

Swap_Ptr (&x, &y); // Вызов функции Swap_Ptr

Функция Swap_Ptr требует явного указания адресов при своем вызове

(&x, &y) и явного их разыменования в функции (*a и *b).

1.7. Механизм обращения к функции и передача данных

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

Управление передается в функцию.

Выделяется память для параметров функции, вычисляются значения формальных параметров и копируются в локальную память. (Так передаются внешние данные, необходимые для работы функции).

Создаются локальные переменные функции (те, которые объявлены в теле функции).

Выполняется алгоритм функции.

По оператору return управление передается в точку вызова, при этом в вызывающую программу передаются новые данные (результат функции).

Локальные переменные, в том числе формальные параметры, умирают, память высвобождается.

1.8. Локальные и глобальные переменные. Время жизни и область действия (видимости) переменных

Дадим несколько определений.

Определение. Объект —это сущность, обладающая некоторыми атрибутами (свойствами) и методами для проверки и изменения атрибутов объекта.

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

Определение. Область действия объекта — это область программного кода, в которой объект известен (то есть действует его объявление). Если объект объявлен в начале программы, вне тела всех функций, то он известен везде внутри того файла, где объявлен.

Определение. Время жизни объекта — это понятие, связанное с областью действия — период времени в процессе выполнения программы, когда объект фактически занимает память (память выделяется при объявлении).

Определение. Локальные (внутренние) объекты объявлены внутри тела блока. Локальные объекты функции объявлены внутри тела функции.

Область действия локального объекта — блок, в котором он описан. Описание действует от точки описания до конца блока.

Время жизни локального объекта — только время выполнения блока. При входе в блок память выделяется, при выходе память освобождается.

Определение. Глобальные (внешние) объекты объявлены вне тела функции на внешнем уровне.

Область действия глобального объекта — от точки объявления до конца файла с кодом программы, в котором объявлен объект.

Время жизни глобального объекта — время выполнения программы.

Параметры функций по механизму действия тоже можно отнести к локальным или глобальным, а именно:

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