Verschil tussen bellen op waarde en bellen op referentie

Belangrijkste verschil tussen Call by Value en Call by Reference

  • Bij de methode Aanroepen op waarde wordt de oorspronkelijke waarde niet gewijzigd, terwijl bij de methode Aanroepen op referentie de oorspronkelijke waarde wordt gewijzigd.
  • In Call by value wordt een kopie van de variabele doorgegeven, terwijl in Call by reference een variabele zelf wordt doorgegeven.
  • In Call by value worden feitelijke en formele argumenten op verschillende geheugenlocaties aangemaakt, terwijl in Call by reference feitelijke en formele argumenten op dezelfde geheugenlocatie worden aangemaakt.
  • Aanroepen op waarde is de standaardmethode in programmeertalen zoals C++, PHP, Visual Basic NET en C#, terwijl Call by reference alleen wordt ondersteund in Java taal.
  • Call by Value-variabelen worden doorgegeven met behulp van een eenvoudige methode, terwijl Call by Reference-aanwijzers nodig zijn om het adres van variabelen op te slaan.

Verschil tussen bellen op waarde en bellen op referentie

In programmeertalen kunnen functies op twee manieren worden aangeroepen: dit staat bekend als Call by Value en Call by Reference.

Wat is de Call by Value-methode?

De methode Call by value kopieert de waarde van een argument naar de formele parameter van die functie. Daarom hebben wijzigingen in de parameter van de hoofdfunctie geen invloed op het argument.

Bij deze methode voor het doorgeven van parameters worden waarden van werkelijke parameters gekopieerd naar de formele parameters van de functie, en worden de parameters op verschillende geheugenlocaties opgeslagen. Eventuele wijzigingen die binnen functies worden aangebracht, worden dus niet weerspiegeld in de werkelijke parameters van de aanroeper.

Wat is de Call by Reference-methode?

Call by reference-methode kopieert het adres van een argument naar de formele parameter. Bij deze methode wordt het adres gebruikt om toegang te krijgen tot het daadwerkelijke argument dat in de functieaanroep wordt gebruikt. Het betekent dat wijzigingen in de parameter het passerende argument veranderen.

Bij deze methode is de geheugentoewijzing hetzelfde als de werkelijke parameters. Alle bewerkingen in de functie worden uitgevoerd op de waarde die is opgeslagen op het adres van de werkelijke parameter, en de gewijzigde waarde wordt opgeslagen op hetzelfde adres.

C Code Voorbeeld van een Call by Value-methode

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

Omdat de variabele die 'a'in main() is gedeclareerd, verschilt van de variabele 'x' in increment(). In dit programma zijn alleen de namen van variabelen vergelijkbaar, maar hun geheugenadres is verschillend en opgeslagen op verschillende geheugenlocaties.

Java Codevoorbeeld van een Call by Reference-methode

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

Omdat de variabele die in 'a' is gedeclareerd, verwijst naar/verwijst naar variabele 'a' in main(). Hier is de naam van de variabele verschillend, maar beide verwijzen/verwijzen naar dezelfde geheugenadreslocaties.

Bellen op waarde versus bellen op referentie

parameters Roep op waarde Bel op referentie
Definitie Als u bij het aanroepen van een functie waarden doorgeeft door variabelen te kopiëren, wordt dit 'Call By Values' genoemd. Bij het aanroepen van een functie wordt in de programmeertaal in plaats van de waarden van variabelen te kopiëren, het adres van de variabelen gebruikt. Dit staat bekend als "Call By References".
argumenten Bij deze methode wordt een kopie van de variabele doorgegeven. Bij deze methode wordt een variabele zelf doorgegeven.
Effect Wijzigingen die in een kopie van een variabele worden aangebracht, wijzigen nooit de waarde van een variabele buiten de functie. Verandering in de variabele heeft ook invloed op de waarde van de variabele buiten de functie.
Verandering van waarde Hiermee kunt u geen wijzigingen aanbrengen in de werkelijke variabelen. Hiermee kunt u wijzigingen aanbrengen in de waarden van variabelen door gebruik te maken van functieaanroepen.
Doorgeven van variabele Waarden van variabelen worden doorgegeven met behulp van een eenvoudige methode. Pointervariabelen zijn vereist om het adres van variabelen op te slaan.
Waarde wijziging Oorspronkelijke waarde niet gewijzigd. De oorspronkelijke waarde wordt gewijzigd.
Geheugenlocatie Feitelijke en formele argumenten
zal in verschillende worden gemaakt
geheugen locatie
Feitelijke en formele argumenten
zal in hetzelfde worden gemaakt
geheugen locatie
Veiligheid Feitelijke argumenten blijven bestaan
veilig omdat ze niet kunnen worden gewijzigd
per ongeluk.
Feitelijke argumenten zijn dat niet
Veilig. Ze kunnen zijn
per ongeluk gewijzigd, dus u moet voorzichtig omgaan met argumentbewerkingen.
Standaard Standaard in veel programmering
talen zoals C++.PHP. Visual BasicNET en C#.
Het wordt door de meesten ondersteund
programmeertalen zoals JAVA, maar
niet als standaard.

Voordelen van het gebruik van de Call by Value-methode in C

Voordelen/voordelen van een call op waarde in C:

  • De methode verandert de oorspronkelijke variabele niet en bewaart dus gegevens.
  • Wanneer een functie wordt aangeroepen, mag dit nooit de feitelijke inhoud van de feitelijke argumenten beïnvloeden.
  • De waarde van feitelijke argumenten wordt doorgegeven aan de formele argumenten, dus eventuele wijzigingen in het formele argument hebben geen invloed op de echte gevallen.

Voordelen van het gebruik van de Call by Reference-methode

Voordelen van het gebruik van call by reference-methode:

  • De functie kan de waarde van het argument wijzigen, wat best handig is.
  • Er worden geen dubbele gegevens aangemaakt omdat er slechts één waarde bestaat, waardoor u geheugenruimte kunt besparen.
  • Bij deze methode wordt er geen kopie van het argument gemaakt. Daarom wordt het zeer snel verwerkt.
  • Helpt u om per ongeluk aangebrachte wijzigingen te voorkomen
  • Iemand die de code leest, weet nooit dat de waarde in de functie kan worden gewijzigd.

Nadelen van het gebruik van de Call by Value-methode

Hier volgen de belangrijkste nadelen/nadelen van een call-by-value-methode:

  • Wijzigingen in feitelijke parameters kunnen ook overeenkomstige argumentvariabelen wijzigen
  • Bij deze methode moeten argumenten variabelen zijn.
  • U kunt een variabele in de hoofdtekst van een functie niet rechtstreeks wijzigen.
  • Soms kan een argument bestaan ​​uit complexe uitdrukkingen
  • Er zijn twee kopieën gemaakt voor dezelfde variabele, wat niet geheugenefficiënt is.

Nadelen van het gebruik van de Call by Reference-methode

Hier volgen de belangrijkste nadelen van het gebruik van de call-by-reference-methode:

  • Sterke non-null garantie. Een functie die een referentie opneemt moet ervoor zorgen dat de invoer non-null is. Daarom hoeft er geen null check te worden uitgevoerd.
  • Als u door referentie gaat, is de functie theoretisch niet puur.
  • Een levenslange garantie is een groot probleem bij referenties. Dit is met name gevaarlijk bij het werken met lambda's en programma's met meerdere threads.