Differenza tra Call by Value e Call by Reference
Differenza chiave tra Chiamata per valore e Chiamata per riferimento
- Nel metodo Chiama per valore il valore originale non viene modificato, mentre nel metodo Chiama per riferimento viene modificato il valore originale.
- In Call by value viene passata una copia della variabile, mentre in Call by reference viene passata la variabile stessa.
- In Chiamata per valore, gli argomenti effettivi e formali verranno creati in diverse posizioni di memoria, mentre in Chiamata per riferimento, gli argomenti effettivi e formali verranno creati nella stessa posizione di memoria.
- Chiama per valore è il metodo predefinito nei linguaggi di programmazione come C++, PHP, Visual Basic NET e C#, mentre la chiamata per riferimento è supportata solo in Java Lingua.
- Le variabili Call by Value vengono passate utilizzando un metodo semplice, mentre i puntatori Call by Reference sono necessari per memorizzare l'indirizzo delle variabili.
Nei linguaggi di programmazione, le funzioni possono essere richiamate in due modi: noto come Call by Value e Call by Reference.
Cos'è il metodo Chiama per valore?
Il metodo Chiama per valore copia il valore di un argomento nel parametro formale di quella funzione. Pertanto, le modifiche apportate al parametro della funzione principale non influiscono sull'argomento.
In questo metodo di passaggio dei parametri, i valori dei parametri effettivi vengono copiati nei parametri formali della funzione e i parametri vengono archiviati in posizioni di memoria diverse. Pertanto qualsiasi modifica apportata all'interno delle funzioni non si riflette nei parametri effettivi del chiamante.
Cos'è il metodo Chiama per riferimento?
Il metodo Chiama per riferimento copia l'indirizzo di un argomento nel parametro formale. In questo metodo, l'indirizzo viene utilizzato per accedere all'argomento effettivo utilizzato nella chiamata di funzione. Significa che le modifiche apportate al parametro alterano l'argomento passante.
In questo metodo, l'allocazione della memoria è la stessa dei parametri effettivi. Tutte le operazioni nella funzione vengono eseguite sul valore memorizzato all'indirizzo del parametro attuale, e il valore modificato verrà memorizzato allo stesso indirizzo.
Codice C Esempio di metodo Call by Value
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; }
Produzione:
before function calling 10 value is 11 after function calling 1-0
Perché la variabile dichiarata 'a' in main() è diversa dalla variabile 'x' in incrementa(). In questo programma solo i nomi delle variabili sono simili, ma i loro indirizzi di memoria sono diversi e memorizzati in posizioni di memoria diverse.
Java Codice Esempio di metodo Chiama per riferimento
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; }
Produzione:
Before call Value of a =10 After call Value of a =11
Perché la variabile dichiarata "a" in fa riferimento/punta alla variabile "a" in main(). Qui il nome della variabile è diverso, ma entrambi puntano/fanno riferimento alle stesse posizioni degli indirizzi di memoria.
Chiamata per valore vs. Chiamata per riferimento
parametri | Chiama per valore | Chiama per riferimento |
---|---|---|
Definizione | Durante la chiamata di una funzione, quando si passano valori copiando le variabili, l'operazione è nota come "Chiama per valori". | Quando si chiama una funzione, nel linguaggio di programmazione invece di copiare i valori delle variabili, viene utilizzato l'indirizzo delle variabili, noto come "Call By References". |
argomenti | In questo metodo viene passata una copia della variabile. | In questo metodo viene passata una variabile stessa. |
Entourage | Le modifiche apportate in una copia della variabile non modificano mai il valore della variabile all'esterno della funzione. | La modifica nella variabile influisce anche sul valore della variabile esterna alla funzione. |
Alterazione del valore | Non consente di apportare modifiche alle variabili effettive. | Consente di apportare modifiche ai valori delle variabili utilizzando le chiamate di funzione. |
Passaggio di variabile | I valori delle variabili vengono passati utilizzando un metodo semplice. | Le variabili puntatore sono necessarie per memorizzare l'indirizzo delle variabili. |
Modifica del valore | Valore originale non modificato. | Il valore originale viene modificato. |
Posizione di memoria | Argomentazioni reali e formali verrà creato in modo diverso posizione di memoria |
Argomentazioni reali e formali verrà creato nello stesso posizione di memoria |
Sicurezza | Restano le vere argomentazioni sicuri poiché non possono essere modificati accidentalmente. |
Gli argomenti reali non lo sono Sicuro. Possono essere modificato accidentalmente, quindi è necessario gestire con attenzione le operazioni sugli argomenti. |
Predefinito | Predefinito in molte programmazioni lingue come C++.PHP. Visual Basic NET e C#. |
È supportato dalla maggior parte linguaggi di programmazione come JAVA, ma non come predefinito. |
Vantaggi dell'utilizzo del metodo Chiama per valore in C
Pro/vantaggi di una chiamata per valore in C:
- Il metodo non modifica la variabile originale, quindi preserva i dati.
- Ogni volta che viene chiamata una funzione, non influenzare mai il contenuto effettivo degli argomenti effettivi.
- Valore degli argomenti effettivi passati agli argomenti formali, quindi qualsiasi modifica apportata all'argomento formale non influisce sui casi reali.
Vantaggi dell'utilizzo del metodo Chiama per riferimento
Vantaggi dell'utilizzo del metodo chiamata per riferimento:
- La funzione può modificare il valore dell'argomento, il che è abbastanza utile.
- Non crea dati duplicati per contenere un solo valore, il che aiuta a risparmiare spazio in memoria.
- In questo metodo non viene creata alcuna copia dell'argomento. Pertanto viene elaborato molto velocemente.
- Ti aiuta a evitare modifiche apportate per errore
- Una persona che legge il codice non sa mai che il valore può essere modificato nella funzione.
Svantaggi dell'utilizzo del metodo Chiama per valore
Ecco i principali svantaggi/svantaggi di un metodo chiamata per valore:
- Le modifiche ai parametri effettivi possono anche modificare le variabili argomento corrispondenti
- In questo metodo, gli argomenti devono essere variabili.
- Non è possibile modificare direttamente una variabile nel corpo di una funzione.
- A volte l'argomento può essere un'espressione complessa
- Sono state create due copie per la stessa variabile che non sono efficienti in termini di memoria.
Svantaggi dell'utilizzo del metodo Chiama per riferimento
Ecco i principali svantaggi dell'utilizzo del metodo chiamata per riferimento:
- Forte garanzia non nulla. Una funzione che accetta un riferimento deve assicurarsi che l'input sia diverso da null. Pertanto non è necessario effettuare il controllo nullo.
- Il passaggio per riferimento rende la funzione non pura teoricamente.
- Una garanzia a vita è un grosso problema con le referenze. Ciò è particolarmente pericoloso quando si lavora con lambda e programmi multi-thread.