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

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

37 страниц (Word-файл)

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

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

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

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

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

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