Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Overføring av argumenter som verdi/peker/referanse | Function Arguments Specification
C++-Funksjoner

Overføring av argumenter som verdi/peker/referanse

Sveip for å vise menyen

Passering med verdi

Variabler som opprettes inne i en funksjon er tilgjengelige kun innenfor den funksjonen. Denne regelen gjelder også når argumenter sendes inn. Parametere i funksjonssignaturen har lokalt omfang og sendes med verdi, noe som betyr at verdiene deres kopieres inn i funksjonen og lagres i separate variabler (akkurat som å låne en bok fra biblioteket i stedet for å ta originalen).

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 peker

Å sende argumenter med verdi er ikke alltid effektivt. Kopiering av verdier bruker ekstra minne, og noen ganger må en funksjon endre den opprinnelige variabelen direkte. I slike tilfeller er det bedre å sende variabelen med peker, som betyr å sende dens minneadresse i stedet for verdien. Dette gjøres ved å bruke pekeroperatoren (*) i funksjonsparameterne.

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

Passering med referanse

Passering med referanse betyr at en funksjon får direkte tilgang til minnet til en variabel, slik at den kan endre den opprinnelige verdien uten å bruke dereferanseoperatoren (*).

Passering med referanse bruker &-operatoren i funksjonsparameterne. Det fungerer på lignende måte som passering med peker, men med to viktige forskjeller:

  • Du trenger ikke bruke * for å få tilgang til variabelen inne i funksjonen.
  • Du trenger ikke bruke & når du kaller funksjonen, kun i dens deklarasjon.
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

Hvilket utsagn beskriver best forskjellen mellom å sende som verdi, peker og referanse?

Velg det helt riktige svaret

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 2. Kapittel 2

Spør AI

expand

Spør AI

ChatGPT

Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår

Seksjon 2. Kapittel 2
some-alt