Erinevus kõne väärtuse ja viite vahel

Lang L: none (table-of-contents):

Anonim

Programmeerimiskeeltes saab funktsioone kasutada kahel viisil: seda nimetatakse Call by Value ja Call by Reference.

Selles õpetuses saate teada,

  • Mis on kõne väärtusmeetodi järgi?
  • Mis on kõne viite meetodil?
  • Kõne väärtusmeetodi järgi näide
  • Kõne näide võrdlusmeetodi järgi
  • Väärtusega kõne vs viide
  • Kõne väärtuse meetodi kasutamise eelised
  • Eeldused kõne võrdlusmeetodi abil kasutamise kohta
  • Call by value meetodi kasutamise puudused
  • Puudused Call by reference meetodi kasutamisel

Mis on meetod kõne väärtuse järgi?

Meetod Kõne väärtuse järgi kopeerib argumendi väärtuse selle funktsiooni formaalsesse parameetrisse. Seetõttu ei mõjuta põhifunktsiooni parameetris tehtud muudatused argumenti.

Selles parameetrite edastamise meetodis kopeeritakse tegelike parameetrite väärtused funktsiooni ametlikesse parameetritesse ja parameetrid salvestatakse erinevatesse mälupaikadesse. Seega ei kajastu funktsioonides tehtud muudatused helistaja tegelikes parameetrites.

PÕHISED erinevused

  • Meetodis Kõne väärtuse järgi algset väärtust ei muudeta, samas kui meetodil Kõne väärtuse järgi algset väärtust muudetakse.
  • Funktsioonis Kõne väärtuse järgi edastatakse muutuja koopia, samas kui viitena helistatakse muutuja ise.
  • Funktsioonis Kõne väärtuse järgi luuakse tegelikud ja formaalsed argumendid erinevates mälupaikades, samas kui viitena helistatakse tegelikud ja formaalsed argumendid samas mälupunktis.
  • Väärtuse järgi helistamine on vaikemeetod programmeerimiskeeltes, nagu C ++, PHP, Visual Basic NET ja C #, samas kui viitega helistamine toetab ainult Java keelt.
  • Kõne väärtuse järgi, muutujad edastatakse lihtsa meetodi abil, samal ajal kui muutujate aadressi salvestamiseks on vaja osutajaid viitega.

Mis on kõne viite meetodil?

Viide meetodil helistamine kopeerib argumendi aadressi formaalsesse parameetrisse. Selles meetodis kasutatakse aadressi juurdepääsuks funktsioonikõnes kasutatud tegelikule argumendile. See tähendab, et parameetris tehtud muudatused muudavad läbivat argumenti.

Selles meetodis on mälu eraldamine sama kui tegelikud parameetrid. Kõik funktsioonis olevad toimingud tehakse tegeliku parameetri aadressile salvestatud väärtusega ja muudetud väärtus salvestatakse samale aadressile.

Näide meetodist Kõne väärtuse järgi

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

Väljund:

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

Kuna main (a) deklareeritud muutuja main () erineb inkrementidena muutujast x. Selles programmis on ainult muutujate nimed sarnased, kuid nende mäluaadress on erinev ja salvestatud erinevatesse mälupaikadesse.

Näide üleskutse meetodist

Public static void(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;}

Väljund:

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

Kuna muutujaks a deklareeritud muutuja viitab / osutab muutujale a (main) (). Siin on muutuja nimi erinev, kuid mõlemad osutavad / viitavad samadele mäluaadressi asukohtadele.

Väärtusega kõne vs viide

Parameetrid Helistage väärtuse järgi Helistage viitega
Definitsioon Kui edastate väärtusi muutujate kopeerimise kaudu, nimetatakse seda funktsiooni kutsumise ajal nimega "Kõne väärtuste järgi". Funktsiooni kutsumise ajal kasutatakse muutujate aadressi programmeerimiskeeles muutujate väärtuste kopeerimise asemel nime "Call By References".
Argumendid Selle meetodi korral edastatakse muutuja koopia. Selles meetodis edastatakse muutuja ise.
Mõju Muutuja koopias tehtud muudatused ei muuda kunagi muutuja väärtust väljaspool funktsiooni. Muutuja muutus mõjutab ka muutuja väärtust väljaspool funktsiooni.
Väärtuse muutmine Ei luba teil tegelikes muutujates muudatusi teha. Võimaldab funktsioonikutsete abil muuta muutujate väärtusi.
Muutuja edastamine Muutujate väärtused edastatakse sirgjoonelise meetodi abil. Muutujate aadressi salvestamiseks on vaja kursori muutujaid.
Väärtuse muutmine Algset väärtust ei muudetud. Algset väärtust muudetakse.
Mälu asukoht Tegelikud ja formaalsed argumendid luuakse erinevas mälupesas Tegelikud ja formaalsed argumendid luuakse samas mälupunktis
Ohutus Tegelikud argumendid jäävad ohutuks, kuna neid ei saa kogemata muuta. Tegelikud argumendid pole ohutud. Neid saab kogemata muuta, nii et peate argumentide toiminguid hoolikalt käsitsema.
Vaikimisi Vaikimisi paljudes programmeerimiskeeltes, näiteks C ++. PHP. Visual Basic NET ja C #. Seda toetab enamik programmeerimiskeeli, näiteks JAVA, kuid mitte vaikimisi.

Kõne väärtuse meetodi kasutamise eelised

Kõne plussid / eelised väärtusmeetodi järgi:

  • Meetod ei muuda algset muutujat, seega säilitab see andmeid.
  • Kui funktsiooni seda nimetatakse, ärge kunagi mõjutage tegelike argumentide tegelikku sisu.
  • Ametlikele argumentidele edastatud tegelike argumentide väärtus, seega ei mõjuta kõik formaalses argumendis tehtud muudatused tegelikke juhtumeid.

Eeldused kõne võrdlusmeetodi abil kasutamise kohta

Plussid helistamise meetodi kasutamise kohta:

  • Funktsioon võib muuta argumendi väärtust, mis on üsna kasulik.
  • See ei loo duplikaatandmeid ainult ühe väärtuse hoidmiseks, mis aitab teil mäluruumi kokku hoida.
  • Selles meetodis pole tehtud argumendist koopiat. Seetõttu töödeldakse seda väga kiiresti.
  • Aitab vältida kogemata tehtud muudatusi
  • Koodi lugev inimene ei tea kunagi, et väärtust saab funktsioonis muuta.

Call by value meetodi kasutamise puudused

Siin on kõne peamised miinused / puudused väärtusmeetodi järgi:

  • Tegelike parameetrite muutmine võib muuta ka vastavaid argumentide muutujaid
  • Selles meetodis peavad argumendid olema muutujad.
  • Funktsiooni kehas ei saa muutujat otseselt muuta.
  • Mõnikord võib argument olla keerukas väljend
  • Sama muutuja jaoks on loodud kaks koopiat, mis pole mälusäästlik.

Puudused Call by reference meetodi kasutamisel

Siin on peamised miinused kõne võrdlusmeetodi kasutamisel:

  • Tugev tühine garantii. Funktsioon, mis võtab sisse viite, peab veenduma, et sisend pole null. Seetõttu ei pea nullkontrolli tegema.
  • Viidete edastamine ei muuda funktsiooni teoreetiliselt puhtaks.
  • Eluaegne garantii on viitega suur probleem. See on eriti ohtlik töötades lambdade ja mitmekeermeliste programmidega.