Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Overførsel af argumenter ved værdi/pegepind/reference | Function Arguments Specification
C++ Funktioner

Overførsel af argumenter ved værdi/pegepind/reference

Stryg for at vise menuen

Passering ved værdi

Variabler oprettet inde i en funktion er kun tilgængelige inden for den funktion. Denne regel gælder også ved overførsel af argumenter. Parametre i funktionssignaturen har lokal rækkevidde og overføres ved værdi, hvilket betyder, at deres værdier kopieres ind i funktionen og gemmes i separate variabler (ligesom at låne en bog fra biblioteket i stedet for at tage 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 ved pointer

At overføre argumenter ved værdi er ikke altid effektivt. Kopiering af værdier bruger ekstra hukommelse, og nogle gange har en funktion brug for at ændre den oprindelige variabel direkte. I sådanne tilfælde er det bedre at overføre variablen ved pointer, hvilket betyder at sende dens hukommelsesadresse i stedet for dens værdi. Dette gøres ved at bruge pointer-operatoren (*) i funktionsparametrene.

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 ved reference

Passering ved reference betyder, at en funktion får direkte adgang til en variabels hukommelse, hvilket gør det muligt at ændre den oprindelige værdi uden at bruge dereference-operatoren (*).

Passering ved reference bruger &-operatoren i funktionsparametrene. Det fungerer på samme måde som passering ved pointer, men med to væsentlige forskelle:

  • Du behøver ikke bruge * for at tilgå variablen inde i funktionen.
  • Du behøver ikke bruge & når funktionen kaldes, kun i dens 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

Hvilken sætning beskriver bedst forskellen mellem at videregive som værdi, pointer og reference?

Vælg det korrekte svar

Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 2. Kapitel 2

Spørg AI

expand

Spørg AI

ChatGPT

Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat

Sektion 2. Kapitel 2
some-alt