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 Code 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 Code Eksempel pรฅ en referencekaldsmetode
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
| Driftsparametre | 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.

