Передача аргументів за значенням/вказівником/посиланням
Свайпніть щоб показати меню
Передача за значенням
Змінні, створені всередині функції, доступні лише в межах цієї функції. Це правило також стосується передачі аргументів. Параметри у сигнатурі функції мають локальну область видимості та передаються за значенням, тобто їх значення копіюються у функцію та зберігаються в окремих змінних (аналогічно до позичання книги в бібліотеці замість взяття оригіналу).
main.cpp
1234567891011121314151617181920#include <iostream> // Function that takes an argument by value void modify(int num) { // Modify the parameter (local copy of the argument) num = num * 2; } int main() { int number = 5; std::cout << "Before function call: " << number << std::endl; // Call the function and pass 'number' by value modify(number); // Varibale in the main function remains unchanged std::cout << "After function call: " << number << std::endl; }
Передача за вказівником
Передача аргументів за значенням не завжди є ефективною. Копіювання значень використовує додаткову пам’ять, і іноді функції потрібно змінити оригінальну змінну безпосередньо. У таких випадках краще передавати змінну за вказівником, тобто надсилати її адресу в пам’яті замість значення. Це здійснюється за допомогою оператора вказівника (*) у параметрах функції.
main.cpp
1234567891011121314151617181920212223#include <iostream> // Function that takes an argument using pointer void modify(int* p_num) { // Modify the value at the memory address pointed by `p_num` // '*' is used to extract the value from the address (pointer) *p_num = (*p_num) * 2; std::cout << "Inside function: " << *p_num << std::endl; } int main() { int number = 5; std::cout << "Before function call: " << number << std::endl; // Call the function and pass the address of 'number' using a pointer // '&' is used to get an address of the variable modify(&number); // 'number' in the main function is modified through the pointer std::cout << "After function call: " << number << std::endl; }
Передача за посиланням
Передача за посиланням означає надання функції прямого доступу до пам’яті змінної, що дозволяє змінювати її початкове значення без використання оператора розіменування (*).
Передача за посиланням використовує оператор & у параметрах функції. Це працює подібно до передачі за вказівником, але має дві ключові відмінності:
- Не потрібно використовувати
*для доступу до змінної всередині функції. - Не потрібно використовувати
&при виклику функції, лише у її оголошенні.
main.cpp
1234567891011121314151617181920#include <iostream> // Function that takes an argument by reference void modify(int& num) { // Modify the parameter directly (no need for dereferencing) num = num * 2; } int main() { int number = 5; std::cout << "Before function call: " << number << std::endl; // Call the function and pass `number` by reference modify(number); // `number` in the main function is modified directly through the reference std::cout << "After function call: " << number << std::endl; }
Дякуємо за ваш відгук!
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат