Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Способы передачи данных из вызываемой функции

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

Переменные, имеющие область видимости файла, доступны из любого места файла, в котором они определены

 

В С++ существует 3 класса памяти:

l auto (автоматический)

l static (статический)

l динамический (будет рассмотрен позднее)

 

l Автоматическая переменная «рождается» в момент ее объявления и прекращает свое существование в момент завершения выполнения блока, где она определена. Автоматическая переменная не инициализируется автоматически. Если она инициализируется при объявлении, инициализация будет выполняться каждый раз при входе в блок и «рождении» переменной.

l У переменных, имеющих класс памяти static, время жизни равно времени жизни всей программы. Статическая переменная по умолчанию инициализируется нулем. Статическая переменная создается и инициализируется один раз – при первом выполнении блока.

 

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

l Глобальные переменные можно сделать доступными и из других файлов, если программа состоит из нескольких файлов.

l По умолчанию глобальные переменные имеют статический класс памяти.

l Глобальные переменные живут все время выполнения программы. Если они не инициализируются явно, по умолчанию, глобальные переменные инициализируются нулевым значением.

 

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


Синтаксис описания функций

 

 

Функция – изолированный именованный блок кода, имеющий определенное назначение

 

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

 

 

Синтаксис описания функций

 

Тип_Возврата Имя_функции (список_параметров) // заголовок

{

операторы; // тело функции

return выражение;

}

 

 

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

 

l Эти переменные, если они не объявлены с атрибутом static уничтожаются после завершения выполнения функции, а хранимые ими значения безвозвратно теряются.

 

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

 


 

Прототипы функций

 

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

 

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

 

 

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

 

l Описание прототипа ничем не отличается от описания заголовка функции:

Тип_Возврата Имя_функции (список_параметров);

 

l Описание прототипа, в отличие от заголовка, заканчивается точкой с запятой.

 


Способы передачи данных

 

Способы передачи данных в вызываемую функцию

 

· Путем передачи аргументов функции

· С использованием глобальных переменных

· Через файлы на внешних запоминающих устройствах

 

 

Способы передачи данных из вызываемой функции

 

· Через возвращаемое значение

· Через формальные параметры, вызываемые по ссылке

· Путем изменения значений глобальных переменных

· Через файлы на внешних запоминающих устройствах

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

 

 

В С++ используются два механизма передачи аргументов в функцию: по значению и по ссылке.


Передача аргументов в функцию по значению

 

 

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

 

· Значения аргументов копируются в созданные переменные.

 

· По завершении работы функции обратное копирование из формальных параметров в переменные - аргументы не производится.

 

· Если в теле функции значения формальных параметров были изменены, эти изменения по завершении работы функции будут потеряны и никак не отразятся на значениях фактических параметров.

 

· По умолчанию все аргументы, кроме массивов, передаются в функции по значению


Передача аргументов в функцию по ссылке

 

· При передаче по ссылке в вызываемую функцию передаются ссылки на переменные – аргументы.

 

· Копии аргументов с именами формальных параметров не создаются.

 

· Вместо этого, по ссылке обеспечивается доступ к участкам памяти, занимаемым аргументами.

 

· Говоря другими словами, обработка аргументов ведется «на месте».

 

· Чтобы передать значения аргументов по ссылке, в качестве формальных параметров указывают переменные – ссылки.

 

· Все изменения формальных параметров, сделанные в функции, происходят с аргументами.

 

· Если в качестве аргумента по ссылке передается константа, то формальный параметр-ссылка должен быть объявлен с модификатором const.

 

 

Передача указателей

 

· Указатели обычно передаются по значению. Доступ к объектам, на которые они указывают при этом происходит «на месте».

 

· Применение указателя в качестве параметра позволяет функции получить аргумент, а не его копию.


Передача массивов

 

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...