Уроки модуля (2/2)
Передача по значению и ссылке
В C++, когда вы передаете аргумент функции, есть два основных способа сделать это: по значению или по ссылке.
Понимание этого различия является ключом как к корректности программы, так и к оптимизации производительности.
Передача по значению (копирование)
По умолчанию C++ передает аргументы по значению. Это означает, что в памяти создается копия данных. Любая модификация, сделанная внутри функции, не повлияет на исходную переменную снаружи:
#include <iostream>
void increment(int n) {
n++; // Modifies only the local copy
}
int main() {
int x = 5;
increment(x);
std::cout << x << std::endl; // Prints 5, x remains unchanged!
return 0;
}Передача по ссылке (&)
Если вы хотите, чтобы функция могла изменять исходную переменную или если вы хотите избежать копирования больших объектов (например, длинных строк или векторов), вы должны использовать передачу по ссылке.
Ссылка объявляется путем добавления символа & после типа параметра:
#include <iostream>
void incrementRef(int& n) {
n++; // Modifies the original variable directly
}
int main() {
int x = 5;
incrementRef(x);
std::cout << x << std::endl; // Prints 6!
return 0;
}Параметр int& n является не копией, а псевдонимом (прямой ссылкой) на переменную x, переданную при вызове функции.
Попробуйте сами
Определите функцию с именем doubleNumber с типом возврата void, которая принимает ссылку на целое число n (используя int& n) и удваивает его значение (n = n * 2). Вызовите его в основном режиме, передав переменную val, инициализированную значением 10, затем напечатайте val.
Показать подсказку
В сигнатуре функции используется символ `&`после типа для обозначения ссылки:`void doubleNumber(int& n)`.
Решение доступно после 3 попыток
Определите функцию с именем swap, которая принимает две целочисленные ссылки a и b (int& a, int& b) и меняет их значения с помощью временной переменной temp. Вызовите его в main, чтобы поменять местами x и y, а затем распечатайте их.
Показать подсказку
Используйте `int temp = a; а = б; b = temp;` чтобы поменять значения.
Решение доступно после 3 попыток