Ero Call by Value ja Call by Reference välillä

Keskeinen ero Call by Value ja Call by Reference välillä

  • Call by value -menetelmässä alkuperäistä arvoa ei muuteta, kun taas Call by reference -menetelmässä alkuperäistä arvoa muutetaan.
  • Call by value -tilassa välitetään muuttujan kopio, kun taas Call by reference -tilassa itse muuttuja välitetään.
  • Call by value -sovelluksessa todelliset ja muodolliset argumentit luodaan eri muistipaikkoihin, kun taas Call by reference -sovelluksessa todelliset ja muodolliset argumentit luodaan samaan muistipaikkaan.
  • Call by value on oletusmenetelmä ohjelmointikielissä, kuten C++, PHP, Visual Basic NET ja C#, kun taas Call by reference on tuettu vain Java Kieli.
  • Call by Value -muuttujat välitetään yksinkertaisella menetelmällä, kun taas Call by Reference -osoittimia tarvitaan muuttujien osoitteiden tallentamiseen.

Ero Call by Value ja Call by Reference välillä

Ohjelmointikielissä funktioita voidaan kutsua kahdella tavalla: joka tunnetaan nimellä Call by Value ja Call by Reference.

Mikä on Call by Value -menetelmä?

Kutsu arvojen mukaan -menetelmällä kopioi argumentin arvon kyseisen funktion muodolliseen parametriin. Siksi pääfunktion parametriin tehdyt muutokset eivät vaikuta argumenttiin.

Tässä parametrien välitysmenetelmässä todellisten parametrien arvot kopioidaan funktion muodollisiin parametreihin ja parametrit tallennetaan eri muistipaikkoihin. Joten funktioiden sisällä tehdyt muutokset eivät heijastu soittajan todellisiin parametreihin.

Mikä on Call by Reference -menetelmä?

Kutsu referenssimenetelmällä kopioi argumentin osoitteen muodolliseen parametriin. Tässä menetelmässä osoitetta käytetään funktiokutsussa käytettyyn varsinaiseen argumenttiin. Se tarkoittaa, että parametriin tehdyt muutokset muuttavat ohitusargumenttia.

Tässä menetelmässä muistin varaus on sama kuin todelliset parametrit. Kaikki toiminnon toiminnot suoritetaan todellisen parametrin osoitteeseen tallennetulle arvolle, ja muutettu arvo tallennetaan samaan osoitteeseen.

C-koodi Esimerkki kutsun arvomenetelmästä

void main() {
        int a = 10,
        void increment(int);
        Cout << "before function calling" << a;
        increment(a);
        Cout << "after function calling" << a;
        getch();

        void increment(int x) {
            int x = x + 1;
            Cout << "value is" << x;
        }

lähtö:

before function calling 10
value is 11
after function calling 1-0

Koska muuttuja 'a'in main() on eri kuin muuttuja 'x' increment(). Tässä ohjelmassa vain muuttujien nimet ovat samanlaisia, mutta niiden muistiosoitteet ovat erilaisia ​​ja ne on tallennettu eri muistipaikkoihin.

Java Koodi Esimerkki kutsusta viitemenetelmällä

Public static void main(string args[]) {
    int a = 10;
    System.out.println("Before call Value of a = ", a);
    Void increment();
    System.out.println("After call Value of a = ", a);
}

Void increment(int x) {
    int x = x + 1;
}

lähtö:

Before call Value of a =10
After call Value of a =11

Koska muuttuja, joka on ilmoitettu 'a':ssa, viittaa/osoittaa muuttujaan 'a' kohdassa main(). Tässä muuttujan nimi on erilainen, mutta molemmat osoittavat/viittaavat samoihin muistiosoitepaikkoihin.

Call by Value vs. Call by Reference

parametrit Soita arvon perusteella Soita viitteellä
Määritelmä Kun funktiota kutsutaan, kun välität arvoja kopioimalla muuttujia, sitä kutsutaan nimellä "Call By Values". Funktiota kutsuttaessa ohjelmointikielessä muuttujien arvojen kopioimisen sijaan käytetään muuttujien osoitetta, se tunnetaan nimellä "Call By References".
argumentit Tässä menetelmässä muuttujan kopio välitetään. Tässä menetelmässä itse muuttuja välitetään.
Vaikutus Muuttujan kopioon tehdyt muutokset eivät koskaan muuta funktion ulkopuolella olevan muuttujan arvoa. Muuttujan muutos vaikuttaa myös funktion ulkopuolella olevan muuttujan arvoon.
Arvon muutos Ei salli sinun tehdä muutoksia todellisiin muuttujiin. Mahdollistaa muuttujien arvojen muuttamisen funktiokutsujen avulla.
Muuttujan ohittaminen Muuttujien arvot välitetään yksinkertaisella menetelmällä. Osoitinmuuttujia tarvitaan muuttujien osoitteiden tallentamiseen.
Arvon muutos Alkuperäistä arvoa ei muutettu. Alkuperäistä arvoa on muutettu.
Muistin sijainti Todelliset ja muodolliset argumentit
luodaan eri
muistipaikka
Todelliset ja muodolliset argumentit
luodaan samalla
muistipaikka
Turvallisuus Varsinaiset argumentit jäävät
turvallisia, koska niitä ei voi muuttaa
vahingossa.
Varsinaiset argumentit eivät ole
Turvallinen. Ne voivat olla
vahingossa muokattu, joten sinun on käsiteltävä argumentit huolellisesti.
oletusarvo Oletusarvo monissa ohjelmoinnissa
kielet kuten C++.PHP. Visual Basic NET ja C#.
Sitä tukee suurin osa
ohjelmointikielet, kuten JAVA, mutta
ei oletuksena.

Call by value -menetelmän käytön edut C:ssä

Puhelun plussat/edut arvon mukaan C:ssä:

  • Menetelmä ei muuta alkuperäistä muuttujaa, joten se säilyttää tiedot.
  • Aina kun funktiota kutsutaan, älä koskaan vaikuta todellisten argumenttien sisältöön.
  • Varsinaisten argumenttien arvo siirtyy muodollisille argumenteille, joten muodolliseen argumenttiin tehdyt muutokset eivät vaikuta todellisiin tapauksiin.

Call by referenssimenetelmän käytön edut

Viitemenetelmän kutsun käytön edut:

  • Funktio voi muuttaa argumentin arvoa, mikä on varsin hyödyllistä.
  • Se ei luo päällekkäisiä tietoja vain yhden arvon säilyttämiseksi, mikä auttaa säästämään muistitilaa.
  • Tässä menetelmässä esitetystä väitteestä ei ole kopiota. Siksi se käsitellään erittäin nopeasti.
  • Auttaa välttämään vahingossa tehdyt muutokset
  • Koodia lukeva henkilö ei koskaan tiedä, että arvoa voidaan muuttaa funktiossa.

Call by value -menetelmän käytön haitat

Tässä on arvomenetelmän mukaisen kutsun tärkeimmät haitat/haitat:

  • Varsinaisten parametrien muutokset voivat myös muokata vastaavia argumenttimuuttujia
  • Tässä menetelmässä argumenttien on oltava muuttujia.
  • Et voi muuttaa suoraan muuttujaa funktiorungossa.
  • Joskus argumentit voivat olla monimutkaisia ​​lausekkeita
  • Samalle muuttujalle on luotu kaksi kopiota, mikä ei ole muistitehokas.

Call by referenssimenetelmän käytön haitat

Tässä on tärkeimmät haitat puhelun viitemenetelmän käyttämisestä:

  • Vahva ei-takuu. Viittauksen vastaanottavan funktion on varmistettava, että syöte ei ole nolla. Siksi nollatarkistusta ei tarvitse tehdä.
  • Viittauksen ohittaminen tekee funktiosta ei teoreettisesti puhdasta.
  • Elinikäinen takuu on iso ongelma referensseissä. Tämä on erityisen vaarallista, kun työskentelet lambda-ohjelmien ja monisäikeisten ohjelmien kanssa.