Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lära Överföring av argument via värde/pekare/referens | Specifikation av funktionsargument
C++-Funktioner

Ö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

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

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

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; }
question mark

Vilket påstående beskriver bäst skillnaden mellan att överföra med värde, pekare och referens?

Vänligen välj det korrekta svaret

Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 2. Kapitel 2

Fråga AI

expand

Fråga AI

ChatGPT

Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal

Avsnitt 2. Kapitel 2
some-alt