Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Oppiskele Argumenttien Välittäminen Arvona/Osoittimena/Viittauksena | Funktioargumenttien Määrittely
C++-Funktiot

Argumenttien Välittäminen Arvona/Osoittimena/Viittauksena

Pyyhkäise näyttääksesi valikon

Arvon mukaan välittäminen

Funktiossa luodut muuttujat ovat käytettävissä vain kyseisessä funktiossa. Tämä sääntö pätee myös argumenttien välittämiseen. Funktion määrittelyn parametreilla on paikallinen näkyvyys ja ne välitetään arvon mukaan, mikä tarkoittaa, että niiden arvot kopioidaan funktioon ja tallennetaan erillisiin muuttujiin (kuten kirjastokirjan lainaaminen alkuperäisen sijaan).

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

Osoittimen kautta välittäminen

Argumenttien välittäminen arvon mukaan ei ole aina tehokasta. Arvojen kopiointi vie ylimääräistä muistia, ja joskus funktion täytyy muokata alkuperäistä muuttujaa suoraan. Tällaisissa tapauksissa on parempi välittää muuttuja osoittimen kautta, eli lähettää sen muistiosoite arvon sijaan. Tämä tehdään käyttämällä osoitinoperaattoria (*) funktion parametreissa.

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

Viittausvälitys

Viittauksella välittäminen tarkoittaa, että funktiolle annetaan suora pääsy muuttujan muistiin, jolloin se voi muuttaa alkuperäistä arvoa ilman viittausoperaattoria (*).

Viittauksella välittäminen käyttää &-operaattoria funktion parametreissa. Se toimii samankaltaisesti kuin osoittimen kautta välittäminen, mutta kahdella keskeisellä erolla:

  • Et tarvitse *-operaattoria käyttääksesi muuttujaa funktion sisällä.
  • Et tarvitse &-operaattoria funktiota kutsuttaessa, vain sen määrittelyssä.
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

Mikä väite kuvaa parhaiten arvon, osoittimen ja viitteen kautta välittämisen eroa?

Valitse oikea vastaus

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 2. Luku 2

Kysy tekoälyä

expand

Kysy tekoälyä

ChatGPT

Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme

Osio 2. Luku 2
some-alt