På programmeringssprog kan funktioner påberåbes på to måder: som kaldes Call by Value og Call by Reference.
I denne vejledning lærer du,
- Hvad er call by value-metode?
- Hvad er Call by Reference-metoden?
- Eksempel på et opkald efter værdimetoden
- Eksempel på et opkald ved hjælp af referencemetode
- Opkald efter værdi vs. Opkald efter reference
- Fordele ved at bruge Call by value-metoden
- Fordele ved at bruge Call by reference-metoden
- Ulemper ved at bruge Call by value-metoden
- Ulemper ved at bruge Call by reference-metoden
Hvad er Call by Value-metoden?
Opkald efter værdi-metoden kopierer værdien af et argument til den formelle parameter for den funktion. Ændringer foretaget i parameteren for hovedfunktionen påvirker derfor ikke argumentet.
I denne parameteroverførselsmetode kopieres værdier af faktiske parametre til funktionens formelle parametre, og parametrene lagres på forskellige hukommelsesplaceringer. Så ændringer, der foretages inden i funktioner, reflekteres ikke i opkaldets faktiske parametre.
Nøgleforskel
- I metoden Opkald efter værdi ændres den oprindelige værdi ikke, mens den oprindelige værdi i Opkald efter reference-metode ændres.
- I Opkald efter værdi sendes en kopi af variablen, mens i Opkald som reference overføres en variabel i sig selv.
- I Opkald efter værdi oprettes aktuelle og formelle argumenter på forskellige hukommelsesplaceringer, mens der i Opkald ved reference oprettes faktiske og formelle argumenter på samme hukommelsesplacering.
- Opkald efter værdi er standardmetoden i programmeringssprog som C ++, PHP, Visual Basic NET og C #, mens opkald som reference kun understøttes Java-sprog.
- Opkald efter værdi, variabler sendes ved hjælp af en ligetil metode, mens henvisninger, pointer er nødvendige for at gemme adressen på variabler.
Hvad er Call by Reference-metoden?
Opkald efter reference metode kopierer adressen på et argument i den formelle parameter. I denne metode bruges adressen til at få adgang til det faktiske argument, der bruges i funktionsopkaldet. Det betyder, at ændringer foretaget i parameteren ændrer passeringsargumentet.
I denne metode er hukommelsestildelingen den samme som de faktiske parametre. Al operation 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.
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;}
Produktion:
before function calling 10value is 11after function calling 1-0
Fordi variabel, der er erklæret 'a'in main (), adskiller sig fra variablen' x 'i trin (). I dette program er kun variabelnavne ens, men deres hukommelsesadresse er forskellig og gemt på forskellige hukommelsesplaceringer.
Eksempel på en Call by Reference-metode
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;}
Produktion:
Before call Value of a =10After call Value of a =11
Fordi variabel erklæret 'a' i henviser / peger på variabel 'a' i main (). Her er variabelnavnet forskelligt, men begge peger / henviser til samme hukommelsesadresseplaceringer.
Opkald efter værdi vs. Opkald efter reference
Parametre | Ring efter værdi | Ring ved henvisning |
---|---|---|
Definition | Når du ringer til en funktion, når du sender værdier ved at kopiere variabler, er den kendt som "Opkald efter værdier." | Mens der kaldes til en funktion, i programmeringssprog i stedet for at kopiere værdierne for variabler, bruges adressen på variablerne, den kaldes "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 variablen ændrer aldrig værdien af variablen 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 variabler. | Giver dig mulighed for at foretage ændringer i værdierne for variabler ved hjælp af funktionsopkald. |
Videregivelse af variabel | Værdier for variabler overføres ved hjælp af en ligetil metode. | Markørvariabler er nødvendige for at gemme adressen på variabler. |
Værdiændring | Oprindelig værdi ikke ændret. | Den oprindelige værdi er ændret. |
Hukommelsesplacering | Faktiske og formelle argumenter oprettes på forskellige hukommelsesplaceringer | Faktiske og formelle argumenter oprettes på samme hukommelsesplacering |
Sikkerhed | Faktiske argumenter forbliver sikre, da de ikke kan ændres ved et uheld. | Faktiske argumenter er ikke sikre. De kan ved et uheld ændres, så du skal håndtere argumenterne nøje. |
Standard | Standard i mange programmeringssprog 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
Fordele / fordele ved et opkald efter værdimetode:
- Metoden ændrer ikke den oprindelige variabel, så den bevarer data.
- Når en funktion kaldes den, skal du aldrig påvirke det faktiske indhold af de faktiske argumenter.
- Værdien af faktiske argumenter, der sendes til de formelle argumenter, så ændringer i det formelle argument påvirker ikke de reelle sager.
Fordele ved at bruge Call by reference-metoden
Fordele ved at bruge opkald ved hjælp af referencemetode:
- Funktionen kan ændre værdien af argumentet, hvilket er ret nyttigt.
- Det opretter ikke duplikatdata til kun at rumme en værdi, som 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 foretaget ved en fejltagelse
- 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 største ulemper / ulemper ved et opkald efter værdimetoden:
- Ændringer af faktiske parametre kan også ændre tilsvarende argumentvariabler
- I denne metode skal argumenter være variabler.
- Du kan ikke ændre en variabel direkte i en funktionsdel.
- En eller anden gang kan argument være komplekse udtryk
- Der er to kopier oprettet 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 opkald efter referencemetode:
- Stærk ikke-nul garanti. En funktion, der tager et referencebehov for at sikre, at input er ikke-nul. Derfor behøver der ikke foretages nulkontrol.
- At videregive ved henvisning gør funktionen ikke rent teoretisk.
- Livstidsgaranti er et stort problem med referencer. Dette er specifikt farligt, når du arbejder med lambdas og multitrådede programmer.