Forskellen mellem Call by Value og Call by Reference
Nøgleforskel mellem Call by Value og Call by Reference
- I Call by value-metoden ændres den oprindelige værdi ikke, hvorimod den oprindelige værdi ændres i Call by reference-metoden.
- I Call by value sendes en kopi af variablen, mens der i Call by reference overføres en variabel i sig selv.
- I Call by value vil faktiske og formelle argumenter blive oprettet på forskellige hukommelsesplaceringer, hvorimod i Call by reference vil faktiske og formelle argumenter blive oprettet på den samme hukommelsesplacering.
- Kald efter værdi er standardmetoden i programmeringssprog som f.eks C++, PHP, Visual Basic NET og C#, hvorimod Call by reference kun understøttes i Java Sprog.
- Call by Value variabler videregives ved hjælp af en ligetil metode, hvorimod Call by Reference pointere er påkrævet for at gemme adressen på variabler.
I programmeringssprog kan funktioner aktiveres på to måder: som er kendt som Call by Value og Call by Reference.
Hvad er Call by Value-metoden?
Call by value-metoden kopierer værdien af et argument ind i den formelle parameter for denne funktion. Derfor påvirker ændringer foretaget af parameteren for hovedfunktionen ikke argumentet.
I denne parameteroverførselsmetode kopieres værdier af aktuelle parametre til funktionens formelle parametre, og parametrene gemmes på forskellige hukommelsesplaceringer. Så eventuelle ændringer foretaget inde i funktioner afspejles ikke i de faktiske parametre for den, der ringer.
Hvad er Call by Reference-metoden?
Call by reference-metoden kopierer adressen på et argument til den formelle parameter. I denne metode bruges adressen til at få adgang til det faktiske argument, der bruges i funktionskaldet. Det betyder, at ændringer foretaget i parameteren ændrer det beståede argument.
I denne metode er hukommelsesallokeringen den samme som de faktiske parametre. Alle handlinger i funktionen udføres på den værdi, der er gemt på adressen for den aktuelle parameter, og den ændrede værdi vil blive gemt på den samme adresse.
C-kode Eksempel på en Call by Value-metode
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; }
Output:
before function calling 10 value is 11 after function calling 1-0
Fordi variabel erklæret 'a'in main() er forskellig fra variabel 'x' i increment(). I dette program er kun variabelnavne ens, men deres hukommelsesadresse er forskellige og gemt på forskellige hukommelsesplaceringer.
Java Kodeeksempel på en Call by Reference-metode
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; }
Output:
Before call Value of a =10 After call Value of a =11
Fordi variabel erklæret 'a' i refererer/peger til variabel 'a' i main(). Her er variabelnavnet forskelligt, men begge peger/refererer til samme hukommelsesadresseplaceringer.
Opkald efter værdi vs. Opkald efter reference
parametre | Ring efter værdi | Ring ved henvisning |
---|---|---|
Definition | Når du kalder en funktion, når du sender værdier ved at kopiere variabler, er det kendt som "Call By Values." | Mens du kalder en funktion, i programmeringssprog i stedet for at kopiere værdierne af variabler, bruges adressen på variablerne, den er kendt som "Call By References. |
argumenter | I denne metode sendes en kopi af variablen. | I denne metode sendes en variabel i sig selv. |
Effekt | Ændringer foretaget i en kopi af variabel ændrer aldrig værdien af variabel uden for funktionen. | Ændring i variablen påvirker også værdien af variablen uden for funktionen. |
Ændring af værdi | Tillader dig ikke at foretage ændringer i de faktiske variable. | Giver dig mulighed for at foretage ændringer i værdierne af variabler ved at bruge funktionskald. |
Overførsel af variabel | Værdier af variable overføres ved hjælp af en ligetil metode. | Pointervariabler er nødvendige for at gemme variables adresse. |
Værdiændring | Oprindelig værdi ikke ændret. | Den oprindelige værdi er ændret. |
Hukommelsesplacering | Faktiske og formelle argumenter vil blive oprettet i forskellige hukommelsesplacering |
Faktiske og formelle argumenter vil blive oprettet i samme hukommelsesplacering |
Sikkerhed | Faktiske argumenter er tilbage sikre, da de ikke kan ændres ved en fejltagelse. |
Faktiske argumenter er det ikke Sikker. Det kan de være ved et uheld ændret, så du skal håndtere argumentoperationer omhyggeligt. |
Standard | Standard i mange programmeringer sprog som C++.PHP. Visual Basic NET og C#. |
Det understøttes af de fleste programmeringssprog som JAVA, men ikke som standard. |
Fordele ved at bruge Call by value-metoden i C
Fordele/fordele ved et opkald efter værdi i C:
- Metoden ændrer ikke den oprindelige variabel, så den bevarer data.
- Når en funktion kaldes den, må du aldrig påvirke det faktiske indhold af de faktiske argumenter.
- Værdien af faktiske argumenter overført til de formelle argumenter, så eventuelle ændringer i det formelle argument påvirker ikke de reelle tilfælde.
Fordele ved at bruge Call by reference-metoden
Fordele ved at bruge call by reference-metoden:
- Funktionen kan ændre værdien af argumentet, hvilket er ret nyttigt.
- Det opretter ikke duplikerede data for kun at holde en værdi, hvilket hjælper dig med at spare hukommelsesplads.
- I denne metode er der ingen kopi af argumentet. Derfor behandles det meget hurtigt.
- Hjælper dig med at undgå ændringer udført ved en fejl
- En person, der læser koden, ved aldrig, at værdien kan ændres i funktionen.
Ulemper ved at bruge Call by value-metoden
Her er de store ulemper/ulemper ved en call by value-metode:
- Ændringer af faktiske parametre kan også ændre tilsvarende argumentvariabler
- I denne metode skal argumenter være variable.
- Du kan ikke ændre en variabel direkte i en funktions krop.
- Nogle gange kan argumenter være komplekse udtryk
- Der er oprettet to kopier til den samme variabel, som ikke er hukommelseseffektiv.
Ulemper ved at bruge Call by reference-metoden
Her er de største ulemper ved at bruge call by reference-metoden:
- Stærk ikke-nul garanti. En funktion, der tager en reference ind, skal sikre, at inputtet ikke er nul. Derfor skal der ikke foretages nulkontrol.
- Beståelse ved henvisning gør, at funktionen ikke er rent teoretisk.
- En livstidsgaranti er et stort problem med referencer. Dette er specielt farligt, når du arbejder med lambdaer og flertrådede programmer.