- •1. Краткие теоретические сведения
- •1.1. Знакомство с функциями
- •1.2. Описание функции
- •1.3.1. Тело функции
- •1.3.2. Формальные параметры функции
- •1.3.3. Обращение к функции
- •1.3.4. Фактические параметры.
- •1.4. Формальные и фактические параметры функции
- •1.5. Описание и объявление функции. Прототип функции
- •1 Способ - Перед main().
- •2 Способ - После main ().
- •1.6. Передача параметров в функцию. Изменяемые значения параметров
- •1.6.1. Передача параметров
- •1.6.2. Передача параметров по значению
- •1.6.3. Передача параметров по ссылке
- •1.6.4. Передача параметров по указателю
- •1.7. Механизм обращения к функции и передача данных
- •1.8. Локальные и глобальные переменные. Время жизни и область действия (видимости) переменных
- •1.8.1. Представление об области видимости переменных
- •1.8.2. Объявление локальных переменных
- •1.8.3. О конфликте имен
- •1.8.4. Глобальные переменные
- •1.8.5. Если имена глобальных и локальных переменных конфликтуют
- •1.9. Принцип сокрытия данных внутри функции. Принцип локализации имен
- •1.10. Передача одномерных массивов как параметров функции
- •1.11. Передача многомерных массивов в функцию
- •1.12. Рекурсивные функции
- •1.13. Аргументы по умолчанию
- •1.14. Встраиваемые функции (inline)
- •1.15. Перегрузка функций
- •1.16. Указатель на функцию
- •1.17. Шаблоны функций
- •1.18. Использования библиотеки этапа выполнения
- •1.18.1. Использование функций библиотеки этапа выполнения
- •1.18.2. Изучение функций библиотеки этапа выполнения
- •1.18.3. Использование функций api
- •1.19. Изменение значений параметров функции
- •1.19.1. Почему функции обычно не могут изменить значения параметров
- •1.19.2. Изменение значения параметра
- •1.19.3. Использование ассемблерных листингов для лучшего понимания работы компилятора
- •1.20. Примеры решения задач с использованием механизма функций
- •2. Задание
- •2.4. Задания для выполнения на занятиях
- •2.4.1. Задание 1. Функции пользователя-использование формул
- •2.4.1.1. Условие задания
- •2.4.1.2. Пример для варианта 30
- •2.4.1.3. Программа
- •2.4.1.4. Тестирование
- •2.4.2. Задание 2. Функции пользователя при работе с массивами
- •2.4.2.1. Условие задания
- •2.4.2.2. Пример для варианта 30
- •2.4.2.3. Программа
- •2.4.2.4. Тестирование
- •2.4.3. Задание 3. Функции пользователя при работе с массивами
- •2.4.3.1. Условие задания
- •2.4.3.2. Пример для варианта 30
- •2.4.3.3. Программа
- •2.4.3.4. Тестирование
- •2.4.4. Задание 4. Вычисление выражений с использованием функций
- •2.4.4.1. Условие задания
- •2.4.4.2. Пример для варианта 30
- •2.4.4.3. Программа
- •2.4.4.4. Тестирование
- •2.4.5. Задание 5. Вычисление интеграла методом трапеций
- •2.4.5.1. Условие задания
- •2.4.5.2. Пример для варианта 30
- •2.4.5.3. Программа
- •2.4.5.4. Тестирование
- •2.4.5.5. Типичные ошибки при выполнении работы
- •Вопросы для самоконтроля
- •Литература
- •1. Краткие теоретические сведения 2
- •1.1. Знакомство с функциями 2
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. Локальные и глобальные переменные. Время жизни и область действия (видимости) переменных
Дадим несколько определений.
Определение. Объект —это сущность, обладающая некоторыми атрибутами (свойствами) и методами для проверки и изменения атрибутов объекта.
В тексте программы под объектами понимают переменные, именованные константы, функции, в целом, имена данных различных типов. Объект присутствует в программе своим именем. Каждый объект должен быть объявлен.
Определение. Область действия объекта — это область программного кода, в которой объект известен (то есть действует его объявление). Если объект объявлен в начале программы, вне тела всех функций, то он известен везде внутри того файла, где объявлен.
Определение. Время жизни объекта — это понятие, связанное с областью действия — период времени в процессе выполнения программы, когда объект фактически занимает память (память выделяется при объявлении).
Определение. Локальные (внутренние) объекты объявлены внутри тела блока. Локальные объекты функции объявлены внутри тела функции.
Область действия локального объекта — блок, в котором он описан. Описание действует от точки описания до конца блока.
Время жизни локального объекта — только время выполнения блока. При входе в блок память выделяется, при выходе память освобождается.
Определение. Глобальные (внешние) объекты объявлены вне тела функции на внешнем уровне.
Область действия глобального объекта — от точки объявления до конца файла с кодом программы, в котором объявлен объект.
Время жизни глобального объекта — время выполнения программы.
Параметры функций по механизму действия тоже можно отнести к локальным или глобальным, а именно:
Параметр, передаваемый по ссылке, действует по механизму глобального объекта. Это единый объект, так как функция и вызывающая программа работают с одним адресом объекта. Это удобное средство для того, чтобы сделать открытым адресное пространство.