Forskellen mellem opkald efter værdi og opkald efter reference

Nøgleforskel - Opkald efter værdi vs Opkald efter reference
 

Mange programmeringssprog bruger funktioner. En funktion er et sæt udsagn, der udfører en bestemt opgave. Hovedkoden kan opdeles i flere funktioner og ringe til dem. Der er to måder at ringe til en funktion på, som f.eks. Opkald efter værdi og opkald ved henvisning. I opkald efter værdimetode overføres kopier af variabler til funktionen. Hvis der sker en ændring i værdien af ​​funktionen, ændrer den ikke den oprindelige værdi. I opkald ved henvisning afspejler ændringer af variablen inde i funktionen den oprindelige værdi. Det vigtigste forskel mellem opkald efter værdi og opkald ved henvisning er det, i opkald efter værdi sendes kopien af ​​variabler til funktionen, og i opkald efter reference overføres adresserne til variablerne til funktionen.  Denne artikel diskuterer forskellen mellem opkald efter værdi og opkald ved henvisning.

INDHOLD

1. Oversigt og nøgleforskel
2. Hvad er opkald efter værdi
3. Hvad er Call by Reference
4. Ligheder mellem opkald efter værdi og opkald efter reference
5. Sammenligning side ved side - Ring efter værdi kontra Opkald efter reference i tabelform
6. Resume

Hvad er Call by Value?

I opkald efter værdi overføres kopier af variabler til funktionen. Funktionen kan ændre den kopierede værdi, men den ændrer ikke den oprindelige værdi. Dette koncept kan let forstås ved at bytte program med to numre. Se nedenstående C-program skrevet med Code Blocks-miljøet.

Figur 01: Program til at bytte to numre

I henhold til nedenstående program har variablen 'a' værdi 20 og variablen 'b' har værdi 30. Når du kalder swap-funktionen (a, b), overføres disse to værdier til swap-funktionen. I swap-funktionen kopieres 'a' til 'x' og 'b' kopieres til 'y'. Nu har 'x' værdi 20 og 'y' har værdi 30. Ved hjælp af temp-variablen udskiftes de to værdier. Når du udskriver værdien af ​​'x' og 'y' inde i denne swap-funktion, giver output 30 for 'x' og 20 for 'y'. Når udførelsen af ​​swapfunktionen er forbi, vender kontrollen tilbage til hovedfunktionen. Når der udskrives værdierne 'a' og 'b', i hovedfunktionen, er resultaterne de originale værdier. De er 20 for 'a' og 30 for 'b'. Ændringer foretaget ved hjælp af swap-funktion afspejles ikke i hovedprogrammet.

Figur 02: Output fra swapping-programmet

'x' og 'y' inde i swap-funktionen har de udskiftede værdier, der er 30 og 20, men disse værdier kan ikke bruges i hovedprogrammet. Selvom 'x' og 'y' har udskiftede værdier, er de lokale variabler til swap-funktion og kan ikke fås adgang til hovedfunktionen. For at undgå dette problem kan opkald ved henvisning bruges.

Hvad er Call By Reference?

I denne metode sendes adresser til variablerne til funktionen. Se nedenstående C-program skrevet med Code Blocks-miljøet.

Figur 03: Udskiftning af to numre ved hjælp af pegepinde

I henhold til det givne eksempel nedenfor er værdien af ​​'a' 20 og værdien af ​​'b' 30. I stedet for at videregive kopier af 'a' og 'b', kan programmereren sende adresserne til 'a' og 'b' 'ved hjælp af funktionen, swap (& a, & b).

Figur 04: Output af swapping-programmet ved hjælp af pointers

I swap skal funktionen bruge pointers, fordi adresser er videregivet, og disse adresser skal holdes af pointers. Inde i funktionen kopieres adressen til 'a' til 'x', og adressen til 'b' kopieres til 'y'. Ved hjælp af temp-variablen udskiftes 'x' og 'y' værdier. I dette opkald ved hjælp af referencemetoden afspejles ændringerne inde i swap-funktionen i hovedprogrammet. Udskrivning af værdierne for 'a' og 'b' i det væsentlige giver de udskiftede værdier. Nu er output fra 'a' 30 og 'b' er 20. Da funktionen tager adressen på variablerne, påvirker ændringerne, der er foretaget inden for funktionen, de oprindelige værdier.

Hvad er ligheden mellem Opkald efter værdi og Opkald efter reference?

  • Disse to metoder bruges til opkaldsfunktioner / metoder.

Hvad er forskellen mellem Opkald efter værdi og Opkald efter reference?

Opkald efter værdi kontra opkald efter reference

I opkald efter værdi overføres kopier af variabler til funktionen, så ændringer foretaget inde i funktionen ændrer ikke den oprindelige værdi. I opkald som reference overføres adressen på variablerne til funktionen, så ændringer foretaget for variabler inde i funktionen ændrer den oprindelige værdi.
 Værdiændring
I opkald efter værdi ændres den oprindelige værdi ikke. I opkald som reference ændrer de originale værdier sig.

Resumé - Opkald efter værdi kontra opkald efter reference

Opkald efter værdi og opkald ved henvisning er metoder til at ringe til funktionen. Forskellen mellem opkald efter værdi og opkald ved henvisning er, at i opkaldet efter værdi overføres kopierne af variabler til funktionen, og i opkaldet ved henvisning sendes variablernes adresser til funktionen. Brug af opkald efter værdi eller opkald ved henvisning afhænger af den opgave, der skal udføres.

Download PDF-versionen af ​​opkald efter værdi vs opkald efter reference

Du kan downloade PDF-version af denne artikel og bruge den til offline-formål som pr. Citatnotat. Download PDF-version her Forskel mellem opkald efter værdi og opkald efter reference

Reference:

1.Jaiswal, Haresh. “11 Call by Value vs Call by Reference.” Youtube, YouTube, 24. december 2015. Tilgængelig her