Överföring av argument via värde/pekare/referens
Svep för att visa menyn
Passering med värde
Variabler som skapas inuti en funktion är endast tillgängliga inom den funktionen. Denna regel gäller även vid överföring av argument. Parametrar i funktionssignaturen har lokal räckvidd och överförs med värde, vilket innebär att deras värden kopieras in i funktionen och lagras i separata variabler (ungefär som att låna en bok från biblioteket istället för att ta originalet).
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; }
Passering med pekare
Att överföra argument med värde är inte alltid effektivt. Att kopiera värden använder extra minne, och ibland behöver en funktion ändra den ursprungliga variabeln direkt. I sådana fall är det bättre att överföra variabeln med pekare, vilket innebär att dess minnesadress skickas istället för dess värde. Detta görs med hjälp av pekaroperatorn (*) i funktionsparametrarna.
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; }
Passera med referens
Att passera med referens innebär att en funktion får direkt åtkomst till en variabels minne, vilket gör det möjligt att ändra det ursprungliga värdet utan att använda dereferensoperatorn (*).
Passering med referens använder &-operatorn i funktionsparametrarna. Det fungerar liknande som att passera med pekare, men med två viktiga skillnader:
- Du behöver inte använda
*för att komma åt variabeln inuti funktionen. - Du behöver inte använda
&när du anropar funktionen, endast i dess deklaration.
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; }
Tack för dina kommentarer!
Fråga AI
Fråga AI
Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal