Урок №96. Параметры и аргументы функций

  Юрий  | 

    | 

  Обновл. 29 мая 2019  | 

 12434

 ǀ   3 

В первой главе этого туториала мы рассматривали функции в следующих уроках:

   Урок №12. Функции и оператор возврата return

   Урок №13. Параметры и аргументы функций

   Урок №19. Предварительное объявление и прототип функции

   Урок №20. Многофайловые программы

   Урок №21. Заголовочные файлы

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

Параметры vs. Аргументы

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

Параметр функции (или ещё «формальный параметр») — это переменная, объявленная в объявлении функции:

Аргумент (или ещё «фактический параметр») — это значение, которое передает в функцию вызывающий объект (caller):

Когда функция вызывается, все параметры функции создаются как переменные, а значения аргументов копируются в параметры. Например:

При вызове boo() с аргументами 4 и 5, создадутся параметры x и y функции boo() и им присвоятся соответствующие значения: 4 и 5. Результатом будет x = 4 и y = 5.

Примечание: В примере выше порядок обработки параметров в функции boo() будет справа налево, т.е. сначала создастся переменная y и ей присвоится значение 5, а затем уже создастся переменная x и ей присвоится значение 4. Порядок, в котором инициализируются параметры в круглых скобках функции, определяет каждый компилятор отдельно, так как С++ явно не указывает этот порядок обработки. С параметрами-переменными это не столь важно и критично, но если вы будете использовать в качестве параметров функции вызовы других функций (что является плохой практикой и не рекомендуется делать), то результат может быть неожиданным.

Рассмотрим следующую программу:

Результат выполнения программы выше:

y = 5
x = 4

Хотя параметры не объявлены внутри блока функции, но они имеют локальную область видимости. Это означает, что они создаются при вызове функции и уничтожаются, когда блок функции завершается:

Существует 3 основных способа передачи аргументов в функцию:

   передача по значению;

   передача по ссылке;

   передача по адресу.

Мы рассмотрим каждый из этих способов по порядку.


Оценить статью:

Звёзд: 1Звёзд: 2Звёзд: 3Звёзд: 4Звёзд: 5 (78 оценок, среднее: 4,94 из 5)
Загрузка...

Комментариев: 3

  1. Аватар Александр:

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

  2. Аватар Алексей:

    Просто хочу уточнить, что здесь описано не совсем верно. Функция считывает параметры в обратном порядке (по крайней мере в Visual Studio 2017).
    И если для переменных это не критически важно, то при передаче функции в качестве аргумента (такое конечно лучше не творить, но все же) могут возникнуть ошибки, например:

    выводом будет:
    y = 5
    x = 4

    1. Юрий Юрий:

      Вы правы. С++ явно не указывает порядок инициализации параметров в функции и уже каждый компилятор сам решает в каком порядке ему их инициализировать. Статью обновил.

Добавить комментарий для Алексей Отменить ответ

Ваш E-mail не будет опубликован. Обязательные поля помечены *