Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
infa.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
185.72 Кб
Скачать

71. Функции. Объявление функций. Передача массива в качестве параметра.

Функции — одна из самых важных компонентов языка C++.

• Любая функция имеет тип, также, как и любая переменная.

• Функция может возвращать значение, тип которого в большинстве случаев аналогично типу самой функции.

• Если функция не возвращает никакого значения, то она должна иметь тип void (такие функции иногда называют процедурами)

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

• после списка аргументов функции ставится открывающая фигурная скобка, после которой находится само тело функции.

• В конце тела функции обязательно ставится закрывающая фигурная скобка.

Функции очень сильно облегчают работу программисту и намного повышают читаемость и понятность кода, в том числе и для самого разработчика.

Пример построения функции

#include <iostream>

using namespace std;

void function_name ()

{

std::cout << "Hello, world" << std::endl;

}

int main()

{

function_name(); // Вызов функции

return 0;

}

Перед вами тривиальная программа, Hello, world, только реализованная с использованием функций.

Если мы хотим вывести «Hello, world» где-то еще, нам просто нужно вызвать соответствующую функцию. В данном случае это делается так: function_name();. Вызов функции имеет вид имени функции с последующими круглыми скобками. Эти скобки могут быть пустыми, если функция не имеет аргументов. Если же аргументы в самой функции есть, их необходимо указать в круглых скобках.

Когда массив используется в качестве аргумента функции, передается только адрес массива, а не копия всего массива. При вызове функции с именем массива в функцию передается указатель на первый элемент массива. (Надо помнить, что в С имена массивов без индекса - это указатели на первый элемент массива.) Параметр должен иметь тип, совместимый с указателем. Имеется три способа объявления параметра, предназначенного для получения указателя на массив. Важно понять, что при использовании массива в качестве аргумента функции происходит передача в функцию его адреса. Это означает, что код внутри функции действует и может изменять настоящее значение массива, используемого при вызове.

73. Объявление функции. Передача имен функций и указателей через список аргументов.

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

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

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

Функции используют память из стека программы. Каждому параметру функции отводится место в данной области, причем его размер определяется типом параметра. При вызове функции память инициализируется значениями фактических аргументов. Стандартным способом передачи аргументов является копирование их значений, т.е. передача по значению. При этом способе функция не получает доступа к реальным объектам, являющихся ее аргументами. Вместо этого она получает в стеке локальные копии этих объектов. Изменение значений копий никак не отражается на значениях самих объектов. Локальные копии теряются при выходе из функции. Значения аргументов при передаче по значению не меняются. Однако такой способ передачи аргументов может не устраивать нас в следующих случаях:

  • передача большого объекта типа класса. Временные и пространственные расходы на размещение и копирование такого объекта могут оказаться неприемлемыми для реальной программы;

  • иногда значения аргументов должны быть модифицированы внутри функции.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]