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
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
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
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; }
Takk for tilbakemeldingene dine!
Spør AI
Spør AI
Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår