- •29. Как работать с массивом символов
- •30. Для чего необходимо динамическое распределение памяти
- •31. Использование ссылок
- •32. Функции, их объявление/определение
- •33. Как описывается передача параметров в функциях
- •34. Особенности работы с функциями, где в качестве параметров используется массив
- •35. Сопоставление фактических и формальных параметров
- •57. Ссылки. Понятие и _____
- •58. Глобальные, локальные, статические локальные и внешние переменные
- •59. Функция. Прототип функции и _____
- •61. Возвращаемые значения функции. Способы возвращения значения
- •62. Способы передачи параметров функции. Передача по значению
- •63. Способы передачи параметров. Передача по ссылке
- •64. Параметры ссылки
- •66. Многомерные массивы как параметры
- •67. Параметры функции, заданные по умолчанию
- •68. Функции подстановки
- •69. Перегруженные функции
- •70. Указатель на функцию
- •71. Виды областей видимости
- •72. Подходы к разработке структуры программ
59. Функция. Прототип функции и _____
По сути, функция это подпрограмма, которая может оперировать данными и возвращать значение.
Функции являются основными составляющими программы. Все операторы могут располагаться только внутри функций.
Объявление функции в общем виде выглядит следующим образом:
тип_результата имя_функции(список_описаний_формальных_параметров)
список_спецификаций;
Параметры (аргументы) функции, указываемые в списке при определении функции, называются формальными. Параметры, указываемые при вызове функции, называются фактическими. Функция может не иметь параметров.
При вызове функции выделяется память под ее формальные параметры, затем каждому формальному параметру присваивается значение фактического параметра. Проверяется соответствие типов формальных и фактических параметров и при необходимости выполняются либо стандартные, либо определенные пользователем преобразования типов.
Список описаний формальных параметров:
тип_параметра имя_параметра, тип_параметра имя_параметра, ...
Определение функции отличается отсутствием точки с запятой после заголовка и наличием тела функции. Тело функции представляет собой составной оператор (блок).
60. Прототипом функции в языке Си или C++ называется объявление функции, которое не содержит тело функции, но указывает имя функции, количество аргументов, типы аргументов и возвращаемый тип данных. В то время как определение функции описывает, что именно делает функция, прототип функции может восприниматься как описание её интерфейса.
В прототипе имена аргументов являются необязательными, тем не менее, необходимо указывать тип вместе со всеми модификаторами (например, указатель ли это или константный аргумент).
61. Возвращаемые значения функции. Способы возвращения значения
Возвращаемое значение функции — это значение, возвращаемое в точку вызова функции, после её выполнения.
Функции возвращают реальные значения или значения типа void, которое служит сигналом для компилятора, что никакое значение возвращено, не будет.
Для возврата значения применяется ключевое слово return, за которым следует подлежащее возвращению значение.
При выполнении return происходит мгновенный выход из функции.
По умолчанию результат, возвращаемый функцией, передается по значению, т.е. значение локальной переменной копируется в ту переменную, которой присваивается значение функции при ее вызове (или во временную переменную, если функция используется в выражении). При возврате большого объекта целесообразно возвращать ссылку или указатель для предотвращения копирования. Возврат ссылки или указателя может привести к тому, что возвращенный объект может быть изменен.
Чтобы предотвратить случайные изменения объекта с помощью возвращенной ссылки или указателя, возвращаемое значение нужно описывать как ссылку или указатель на константу :
const int &a(int i);
62. Способы передачи параметров функции. Передача по значению
Параметры в функции могут передаваться двумя способами: по значению и по ссылке.
void Function(char Ch);
При вызове функция может иметь вид:
Function (Ch2)
В памяти создаётся временная переменная Сh, в нее копируется значение аргумента Ch2. На этом связь между Ch и Ch2 разрывается. Можно изменять значение Ch внутри функции, но это никак не отразится на значении внешней переменной Ch2, указанной в вызове функции в качестве аргумента.
По умолчанию в С++ параметры передаются по значению, т.е. значения фактических параметров копируются в память, отведенную для формальных параметров. При этом значения, с которыми работает функция - это ее собственные локальные копии фактических параметров и их изменение на эти параметры не влияет. При окончании функции эти локальные значения теряются. Таким образом, при передаче по значению содержимое фактических параметров не изменяется.
