Starpība starp zvanu pēc vērtības un zvanu pēc atsauces

Satura rādītājs:

Anonim

Programmēšanas valodās funkcijas var izsaukt divējādi: to sauc par Zvanu pēc vērtības un Zvanu pēc atsauces.

Šajā apmācībā jūs uzzināsiet,

  • Kas ir zvans pēc vērtības metodes?
  • Kas ir zvana pēc atsauces metode?
  • Zvana pēc vērtības metodes piemērs
  • Zvana piemērs, izmantojot atsauces metodi
  • Zvans pēc vērtības salīdzinājumā ar zvanu pēc atsauces
  • Priekšrocības, izmantojot zvanu pēc vērtības metodi
  • Priekšrocības, izmantojot zvanu ar atsauces metodi
  • Trūkumi, izmantojot zvanu pēc vērtības metodi
  • Trūkumi, izmantojot zvanu pēc atsauces metodes

Kas ir zvana pēc vērtības metode?

Metode Zvana pēc vērtības kopē argumenta vērtību šīs funkcijas formālajā parametrā. Tāpēc izmaiņas, kas veiktas galvenās funkcijas parametrā, neietekmē argumentu.

Šajā parametru nodošanas metodē faktisko parametru vērtības tiek kopētas uz funkcijas formālajiem parametriem, un parametri tiek saglabāti dažādās atmiņas vietās. Tātad jebkuras izmaiņas, kas veiktas funkciju iekšienē, netiek atspoguļotas zvanītāja faktiskajos parametros.

GALVENĀS ATŠĶIRĪBAS

  • Metode Zvana pēc vērtības sākotnējā vērtība netiek modificēta, turpretī Zvana pēc atsauces metodē tiek mainīta sākotnējā vērtība.
  • Sadaļā Zvans pēc vērtības tiek pārsūtīta mainīgā kopija, savukārt izsaukumā Zvans pēc atsauces - pats mainīgais.
  • Sadaļā Zvans pēc vērtības faktiskie un formālie argumenti tiks izveidoti dažādās atmiņas vietās, savukārt izsaukumā Zvani ar atsauci faktiskie un formālie argumenti tiks izveidoti tajā pašā atmiņas vietā.
  • Zvana pēc vērtības ir noklusējuma metode programmēšanas valodās, piemēram, C ++, PHP, Visual Basic NET un C #, savukārt zvans pēc atsauces tiek atbalstīts tikai Java valodā.
  • Zvana pēc vērtības mainīgie tiek pārsūtīti, izmantojot vienkāršu metodi, turpretim izsaukumam ar atsauci ir nepieciešami rādītāji, lai saglabātu mainīgo adresi.

Kas ir zvana pēc atsauces metode?

Zvana pēc atsauces metode formāta parametrā iekopē argumenta adresi. Šajā metodē adrese tiek izmantota, lai piekļūtu faktiskajam argumentam, kas izmantots funkciju izsaukumā. Tas nozīmē, ka parametrā veiktās izmaiņas maina garāmejošo argumentu.

Šajā metodē atmiņas piešķiršana ir tāda pati kā faktiskajiem parametriem. Visas funkcijas funkcijas veic ar vērtību, kas saglabāta faktiskā parametra adresē, un modificētā vērtība tiks saglabāta tajā pašā adresē.

Metodes Zvans pēc vērtības piemērs

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

Izeja:

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

Tā kā mainīgais, kas deklarēts kā “a” in main (), atšķiras no mainīgā “x” ar pieaugumu (). Šajā programmā tikai mainīgo nosaukumi ir līdzīgi, bet to atmiņas adrese ir atšķirīga un saglabāta dažādās atmiņas vietās.

Zvana pēc atsauces metodes piemērs

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

Izeja:

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

Tā kā mainīgais, kas deklarēts kā “a”, atsaucas / norāda uz mainīgo “a” galvenajā (). Šeit mainīgā nosaukums ir atšķirīgs, taču abi norāda / atsaucas uz vienām un tām pašām atmiņas adreses vietām.

Zvans pēc vērtības salīdzinājumā ar zvanu pēc atsauces

Parametri Zvans pēc vērtības Zvans ar atsauci
Definīcija Izsaucot funkciju, kad jūs nododat vērtības, kopējot mainīgos, to sauc par "Call By Values". Izsaucot funkciju, programmēšanas valodā mainīgo vērtību kopēšanas vietā tiek izmantota mainīgo adrese, tā ir pazīstama kā "Call By References.
Argumenti Šajā metodē mainīgā kopija tiek nodota. Šajā metodē tiek mainīts pats mainīgais.
Efekts Mainīgā lieluma kopijā veiktās izmaiņas nekad nemaina mainīgā vērtību ārpus funkcijas. Mainīgā mainība ietekmē arī mainīgā vērtību ārpus funkcijas.
Vērtības maiņa Neļauj veikt izmaiņas faktiskajos mainīgajos. Ļauj veikt izmaiņas mainīgo lielumos, izmantojot funkciju izsaukumus.
Mainīgā nodošana Mainīgo vērtības tiek nodotas, izmantojot vienkāršu metodi. Rādītāju mainīgie ir nepieciešami, lai saglabātu mainīgo adresi.
Vērtības modifikācija Sākotnējā vērtība nav mainīta. Sākotnējā vērtība ir modificēta.
Atmiņas atrašanās vieta Faktiskie un formālie argumenti tiks izveidoti dažādās atmiņas vietās Faktiskie un formālie argumenti tiks izveidoti tajā pašā atmiņas vietā
Drošība Faktiskie argumenti paliek droši, jo tos nevar nejauši modificēt. Faktiskie argumenti nav droši. Tos var nejauši modificēt, tāpēc jums rūpīgi jāapstrādā argumentu darbības.
Noklusējums Noklusējums daudzās programmēšanas valodās, piemēram, C ++. PHP. Visual Basic NET un C #. To atbalsta lielākā daļa programmēšanas valodu, piemēram, JAVA, taču tā nav noklusējuma.

Priekšrocības, izmantojot zvanu pēc vērtības metodi

Zvana plusi / ieguvumi pēc vērtības metodes:

  • Metode nemaina sākotnējo mainīgo, tāpēc tā saglabā datus.
  • Kad funkcija to sauc, nekad neietekmējiet faktisko argumentu faktisko saturu.
  • Faktisko argumentu vērtība, kas nodoti formālajiem argumentiem, tāpēc jebkādas izmaiņas, kas veiktas oficiālajā argumentā, neietekmē reālos gadījumus.

Priekšrocības, izmantojot zvanu ar atsauces metodi

Plusi zvana izmantošanai ar atsauces metodi:

  • Funkcija var mainīt argumenta vērtību, kas ir diezgan noderīga.
  • Tas nerada datu dublikātus tikai vienas vērtības glabāšanai, kas palīdz ietaupīt vietu atmiņā.
  • Šajā metodē nav izveidota argumenta kopijas. Tāpēc tas tiek apstrādāts ļoti ātri.
  • Palīdz izvairīties no kļūdām veiktajām izmaiņām
  • Persona, kas lasa kodu, nekad nezina, ka vērtību var mainīt funkcijā.

Trūkumi, izmantojot zvanu pēc vērtības metodi

Šeit ir galvenie zvana trūkumi / trūkumi pēc vērtības metodes:

  • Faktisko parametru izmaiņas var modificēt arī atbilstošos argumentu mainīgos
  • Šajā metodē argumentiem jābūt mainīgiem.
  • Funkcijas pamattekstā mainīgo nevar tieši mainīt.
  • Kādreiz arguments var būt sarežģītas izteiksmes
  • Tam pašam mainīgajam ir izveidotas divas kopijas, kas nav atmiņā efektīvas.

Trūkumi, izmantojot zvanu pēc atsauces metodes

Šeit ir galvenie mīnusi, izmantojot zvanu pēc atsauces metodes:

  • Spēcīga nenulles garantija. Funkcijai, kas uzņem atsauci, jāpārliecinās, vai ievadītā vērtība nav nulle. Tāpēc nulles pārbaude nav jāveic.
  • Pārejot ar atsauci, funkcija teorētiski nav tīra.
  • Mūža garantija ir liela problēma ar atsaucēm. Tas ir īpaši bīstami, strādājot ar lambdas un vairāku pavedienu programmām.