Le funzioni possono essere richiamate in due modi in un programma. Un metodo è per chiamata per riferimento e il metodo successivo è per chiamata per valore. Questi metodi possono essere differenziati in base al tipo di valori che vengono passati ai parametri.
I parametri utilizzati in essi sono chiamati parametri effettivi. Sono utilizzati in molti linguaggi di programmazione come C, C++ e Java.
Punti chiave
- La chiamata per riferimento passa l'indirizzo di memoria di una variabile a una funzione, mentre la chiamata per valore invia una copia del valore della variabile.
- Con la chiamata per riferimento, le modifiche apportate all'interno di una funzione influiscono direttamente sulla variabile originale, mentre la chiamata per valore lascia inalterata la variabile originale.
- La chiamata per riferimento è più efficiente in termini di memoria rispetto alla chiamata per valore, ma può portare a effetti collaterali indesiderati se non gestita con attenzione.
Chiamata per riferimento vs Chiamata per valore
L'aceto bianco, utilizzato per pulire o cucinare, viene prodotto facendo fermentare l'alcool distillato, ottenendo un liquido limpido e dal sapore pungente. L'aceto di mele viene prodotto facendo fermentare gli zuccheri delle mele e ha un gusto più delicato e leggermente dolce, utilizzato nei condimenti per insalata e nelle marinate.

Il metodo di chiamata per riferimento viene utilizzato per accedere all'argomento effettivo che è la chiamata di funzione. Ciò significa che le modifiche vengono apportate al parametro solo dopo che l'argomento è stato passato.
Utilizza la stessa allocazione di memoria utilizzata nei parametri effettivi. Quando chiama una funzione, invece di copiare le variabili, l'indirizzo stesso viene utilizzato nella chiamata per riferimenti.
Chiamata per valore è una subroutine che trasmette i dati effettivi dei parametri utilizzati nella subroutine.
In questo metodo, quando si chiama una funzione, si passa il valore alla variabile degli argomenti nella funzione chiamata in modo che la funzione chiamata lavori sul valore. Questa modifica non si rifletterà nella funzione chiamata.
Tavola di comparazione
Parametri di confronto | Chiama per riferimento | Chiamata per valore |
---|---|---|
Variabile | La variabile è passata. | La copia della variabile viene passata. |
Valore variabile | Le modifiche apportate influenzeranno la funzione all'esterno. | Le modifiche apportate non influiranno sulla funzione all'esterno. |
Valore originale | È modificato. | Non è modificato. |
Sicurezza | Gli argomenti reali non sono sicuri. | Gli argomenti reali sono al sicuro. |
Definizione | Utilizza una variabile stessa per il passaggio. | Utilizza la copia della variabile per il passaggio. |
Che cos'è la chiamata per riferimento?
È un metodo utilizzato per passare argomenti a una funzione. Per memorizzare l'indirizzo delle variabili, vengono utilizzate variabili puntatore. In questo metodo, gli argomenti effettivi non sono sicuri.
Possono essere apportate modifiche accidentali. È importante gestire con attenzione le operazioni sugli argomenti. Aiuta a evitare modifiche apportate per errore.
Non creerà alcun dato duplicato poiché contiene un solo valore in modo da poter risparmiare spazio in memoria. Se una persona legge il codice, non sarà in grado di scoprire se i valori modificati in questo codice non lo sono.
In questo metodo, una garanzia a vita è un grosso problema. Diventerà un pericolo se lavori con programmi multi-thread e lambda. Per dichiarare la chiamata per riferimento, devi passare un indirizzo.
Chiama per riferimento quando si tratta di programmazione in C. Accede direttamente ai dati ed esegue le funzioni su di essi. Ma devi stare attento poiché i puntatori sono coinvolti in esso.
Se conosci lo stato particolare dell'elemento di dati, chiama per riferimento il metodo id perfect. La modifica di una copia dei dati non farà nulla di utile
La chiamata per riferimento presenta pericoli che la chiamata per valore non presenta. È possibile riassegnare inavvertitamente un valore a un puntatore e perderlo in memoria.
Cos'è la chiamata per valore?
In questo metodo, le modifiche apportate all'interno della funzione del parametro non avranno alcun effetto sull'argomento. Il programma di scambio funge da miglior esempio di programma call by value.
Spiega che non vengono apportate modifiche al valore anche se vengono modificate all'interno della funzione. In Java, il metodo chiamata per valore significa chiamare il metodo con il suo parametro come valore.
In questo metodo, i parametri vengono memorizzati in diverse posizioni di memoria. Se si apportano modifiche all'interno della posizione, il parametro effettivo del chiamante non sarà influenzato.
Questo metodo è il migliore perché il valore originale non viene modificato. Ma non puoi apportare alcuna modifica alle variabili effettive. Gli argomenti effettivi saranno al sicuro in questo metodo poiché non è possibile apportare modifiche accidentalmente.
Questo metodo preserva i dati poiché non modifica la variabile originale. Qui gli argomenti sono variabili. La modifica di una variabile nel corpo di una funzione non è diretta. A volte le espressioni complesse possono funzionare come argomenti.
Non è efficiente in termini di memoria poiché vengono create due copie per la stessa variabile. Se la dimensione dei dati è grande, il metodo call-by-value non li risolverà. In tal caso, i programmatori dovrebbero scegliere il metodo di chiamata per riferimento.
Principali differenze tra chiamata per riferimento e chiamata per valore
- Il valore originale viene modificato nella chiamata per riferimento. Invece nella call by value il valore originale non viene modificato.
- La chiamata per riferimento è supportata dai linguaggi di programmazione, ma non è predefinita. D'altra parte, la chiamata per valore funziona di default nei linguaggi di programmazione.
- In Chiamata per riferimento, qualsiasi modifica apportata alla variabile influirà anche sulla variabile al di fuori della funzione. D'altra parte, nella chiamata per valore, qualsiasi modifica apportata alla variabile non influirà sulla variabile al di fuori della funzione.
- La chiamata per riferimento consente di apportare modifiche al valore della variabile. D'altra parte, la call-by-value non ti consentirà di apportare modifiche.
- Nella chiamata per riferimento, verrà passato un indirizzo del valore. Ma nella chiamata per riferimento, verrà passata una copia del valore.