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

Страницы работы

Уважаемые коллеги! Предлагаем вам разработку программного обеспечения под ключ.

Опытные программисты сделают для вас мобильное приложение, нейронную сеть, систему искусственного интеллекта, SaaS-сервис, производственную систему, внедрят или разработают ERP/CRM, запустят стартап.

Сферы - промышленность, ритейл, производственные компании, стартапы, финансы и другие направления.

Языки программирования: Java, PHP, Ruby, C++, .NET, Python, Go, Kotlin, Swift, React Native, Flutter и многие другие.

Всегда на связи. Соблюдаем сроки. Предложим адекватную конкурентную цену.

Заходите к нам на сайт и пишите, с удовольствием вам во всем поможем.

Фрагмент текста работы

  • завершении программы или функции, в которой была описана переменная, память автоматически освобождается.
  • Доступ к объявленной переменной осуществляется по ее имени. При этом все обращения к переменной меняются на адрес ячейки памяти, в которой хранится ее значение.
  • Доступ к значению переменной можно получить иным способом – определить собственные переменные для хранения адресов памяти. Такие переменные называют указателями.
  • Итак, указатель – это переменная, значением которой является адрес памяти, по которому храниться объект определенного типа (другая переменная).
  • Как и любая переменная, указатель должен быть объявлен. При объявлении указателей всегда указывается тип переменной, значение которой будет храниться по данному адресу. Звездочка в описании указателя относиться непосредственно к имени, поэтому, чтобы объявить несколько указателей, ее ставят перед именем каждого из них.
  • При работе с указателями часто используют операции получения адреса (&) и разыменования (*). Операция получения адреса (&) возвращает адрес своего операнда. Операция разыменования (*) возвращает значение переменной, хранящееся по заданному адресу, то есть выполняет действие, обратное операции получения адреса (&).
  • C помощью указателей можно передавать адреса фактических параметров функциям и адреса функций в качестве параметров, создавать новые переменные в процессе выполнения программы, обрабатывать массивы, строки и структуры.

Понятие о ссылках

  • Формат описания ссылки:
  • тип &идентификатор_1 = идентификатор_2;
  • #include <iostream>
  • using namespace std;
  • int main(void)
  • { int a = 5, b = 10;
  • int &aRef = a; // aRef является ссылкой на а
  • aRef = b; // а равно b
  • aRef++; // a++;
  • cout << "a = " << a << endl;
  • }

Понятие о ссылках

  • Ссылка на некоторую переменную может рассматриваться как указатель, который при работе с ним всегда разыменовывается. Для ссылки не требуется дополнительного пространства в памяти: она является просто другим именем или псевдонимом переменной. Для определения ссылки применяется унарный оператор &.
  • Ссылка не создает копию объекта, а лишь является другим именем объекта. Чаще всего ссылки используются для передачи параметров в функции.

Способы передачи параметров

// Поиск максимального из двух чисел #include <iostream> using namespace std; // передача параметров по значению int max(int a, int b) { if (a > b) return a; else return b; } int main(void) { int m, k, i; cout << "i = "; cin >> i; cout << "k = "; cin >> k; m = max(i, k); // вызов функции cout << "max = " << m << endl; }

Способы передачи параметров

  • Передача фактических параметров в функцию может происходить:
    • по значению,
    • по адресу.
  • При передаче в функцию фактического параметра по значению, соответствующий формальный параметр получит копию значения фактического параметра. Функция работая с копией фактического параметра не может изменить оригинальное значение фактического параметра. Это происходит потому, что копия фактического параметра (формальный параметр) создается в стеке. В момент завершения работы функции стековое пространство, в котором находятся формальные параметры функции, очищается, уничтожая находящиеся в нем данные. При этом значение-оригинал фактического параметра оказывается недоступным для функции.
  • В примере фактические параметры i и k передаются в функцию max по значению, т. е. формальный параметр a получит копию значения фактического параметра i, а формальный параметр b получит копию значения фактического параметра k.

Способы передачи параметров

// Обмен значений двух переменных #include <iostream> using namespace std; // передача параметров по адресу с использованием указателей void change1(int *a1, int *b1) { int c = *a1; *a1 = *b1; *b1 = c; } int main(void) { int a, b; cout << " a : "; cin >> a; cout << " b : "; cin >> b; change1(&a, &b); cout << endl << " a = " << a << endl; cout << " b = " << b << endl; }

Способы передачи параметров

  • Если функция в процессе своей работы должна изменить значение фактического параметра, то его нужно передать по адресу, с использованием указателя или по ссылки.
  • Для передачи в функцию фактического параметра по адресу с использованием указателя необходимо:
    1. Оформить фактический параметр, либо как указатель ранее инициализированный, либо как обычную переменную к которой применена операция прямой адресации (&);
    2. Оформить в заголовке функции соответствующий формальный параметр как указатель;
  • При передаче в функцию фактического параметра по адресу с использованием указателя соответствующий формальный параметр получает адрес фактического параметра и в функции можно применить операцию разыменования (*) формального параметра указателя, получая таким образом доступ к значению фактического параметра и возможность его изменения.
  • В примере формальные параметры указатели a1 и b1 получат адреса фактических параметров a и b.

Способы передачи параметров

// Обмен значений двух переменных #include <iostream> using namespace std; // передача параметров по адресу с использованием ссылок void change2(int& a1, int& b1) { int c = a1; a1 = b1; b1 = c; } int main(void) { int a, b; cout << " a : "; cin >> a; cout << " b : "; cin >> b; change2(a, b); cout << endl << " a = " << a << endl; cout << " b = " << b << endl; }

Способы передачи параметров

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

Похожие материалы

Информация о работе

Уважаемые коллеги! Предлагаем вам разработку программного обеспечения под ключ.

Опытные программисты сделают для вас мобильное приложение, нейронную сеть, систему искусственного интеллекта, SaaS-сервис, производственную систему, внедрят или разработают ERP/CRM, запустят стартап.

Сферы - промышленность, ритейл, производственные компании, стартапы, финансы и другие направления.

Языки программирования: Java, PHP, Ruby, C++, .NET, Python, Go, Kotlin, Swift, React Native, Flutter и многие другие.

Всегда на связи. Соблюдаем сроки. Предложим адекватную конкурентную цену.

Заходите к нам на сайт и пишите, с удовольствием вам во всем поможем.