Модульні уроки (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; a = b; b = temp;`, щоб поміняти значення.
Рішення доступне після 3 спроб