Этот сайт использует cookies. Продолжение работы с сайтом означает, что Вы согласны!
Способы передачи параметров в функцию
Как вы уже знаете, после названия функции, внутри круглых скобок, указывается тип и название параметров через запятую. Если функция не принимает параметров, то указываются только круглые скобки или внутри круглых скобок задается ключевое слово void
(в языке C ключевое слово void
является обязательным). В определении функции после типа обязательно должно быть указано название параметра, которое является локальной переменной. Эта переменная создается при вызове функции, а после выхода из функции она удаляется. Таким образом, локальная переменная видна только внутри функции и ее значение между вызовами не сохраняется (исключением являются статические переменные). Если название локальной переменной совпадает с названием глобальной переменной, то все операции будут производиться с локальной переменной, а значение глобальной не изменится. Чтобы в этом случае обратиться к глобальной переменной, необходимо перед ее названием указать оператор ::
.
При вызове функции указывается название функции, после которого внутри круглых скобок передаются значения. Количество и тип параметров в объявлении функции должны совпадать с количеством и типом параметров при вызове. Переданные значения присваиваются переменным, расположенным в той же позиции в определении функции. Так при вызове функции sum(10, 20)
(прототип int sum(int x, int y)
) переменной x
будет присвоено значение 10
, а переменной y
— значение 20
. Если функция не принимает параметров, то при вызове указываются только круглые скобки.
По умолчанию в функцию передается копия значения переменной, а не ссылка на переменную. Таким образом, изменение значения внутри функции не затронет значение исходной переменной. Пример передачи параметра по значению приведен в листинге 12.7.
Листинг 12.7. Передача параметра по значению
#include <iostream>
void func(int x);
int main() {
int x = 10;
func(x);
std::cout << x << std::endl; // 10
return 0;
}
void func(int x) {
x = x + 20; // Значение нигде не сохраняется!
}
Передача копии значения для чисел является хорошим решением, но при использовании массивов и объектов, а также при необходимости изменить значение исходной переменной, лучше применять передачу указателя. Для этого при вызове функции перед названием переменной указывается оператор &
(взятие адреса), а в прототипе функции объявляется указатель. В этом случае в функцию передается не значение переменной, а ее адрес. Внутри функции вместо переменной используется указатель. Пример передачи указателя приведен в листинге 12.8.
Листинг 12.8. Передача указателя в функцию
#include <iostream>
void func(int *px);
int main() {
int x = 10;
func(&x); // Передаем адрес
std::cout << x << std::endl; // 30, а не 10
return 0;
}
void func(int *px) {
*px = *px + 20; // Изменяется значение переменной x
}
Однако, если функция большая, то разыменовывать указатель при каждой операции не очень удобно. В языке C++ существует еще один способ передачи параметров — механизм ссылок. Суть его заключается в том, что внутри функции переменная является псевдонимом исходной переменной. Любые изменения псевдонима отражаются на исходной переменной. При использовании механизма ссылок перед названием переменной в объявлении и определении функции указывается оператор &
, а при вызове — только название переменной. Пример использования механизма ссылок приведен в листинге 12.9.
Листинг 12.9. Использование механизма ссылок
#include <iostream>
void func(int &y);
int main() {
int x = 10;
func(x);
std::cout << x << std::endl; // 30, а не 10
return 0;
}
void func(int &y) {
// Переменная y является псевдонимом переменной x
y = y + 20; // Изменяется значение переменной x
}
Помощь сайту
ЮMoney (Yandex-деньги): 410011140483022
ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов