C++ Chiama per indirizzo e Chiama per riferimento

C Call Address



C++ è un linguaggio di programmazione flessibile e generico. È stato originariamente creato da Bjarne Stroustrup, un informatico danese, nel 1985. Il C++ supporta metodi di passaggio a tre parametri, ovvero chiamata per valore, chiamata per indirizzo e chiamata per riferimento. In questo articolo, discuteremo del meccanismo di chiamata per indirizzo e chiamata per riferimento.

Che cos'è una funzione?

Prima di passare all'argomento vero e proprio, dobbiamo capire qual è la funzione in C++. Molti di voi potrebbero già avere familiarità con le funzioni.







Una funzione è fondamentalmente un pezzo di codice che può essere utilizzato per eseguire un determinato compito. Una funzione viene utilizzata principalmente per ridurre il codice ripetitivo in un programma C++. Prende l'input come parametri e restituisce l'output come valore di ritorno. Se definiamo la funzione una volta, possiamo chiamarla/usarla più volte nella parte successiva del nostro programma. In questo modo, salviamo molto codice ripetitivo nel programma.



Ogni programma C++ deve avere la funzione main(). La funzione main() è il punto di ingresso per un programma C++. Oltre alla funzione main(), il programmatore può definire tutte le funzioni che desidera.



Ecco la sintassi per definire una funzione:





Return_type Nome_funzione(Lista parametri di ingresso)

La funzione in C++ può accettare 0 o più numeri di parametri di input, mentre può restituire solo un valore di ritorno.

Che cos'è l'indirizzo?

Esistono due tipi di variabili in C++ (simili al linguaggio C): Variabile dati e Variabile indirizzo. La variabile indirizzo viene utilizzata per memorizzare l'indirizzo di un'altra variabile di dati. Ad esempio, consideriamo il seguente frammento di codice:



intio= 100;
int *ptr= &io;

Qui, la prima istruzione ci dice che la variabile i è una variabile di dati e sta memorizzando il valore 100. Nella seconda istruzione, stiamo dichiarando una variabile puntatore, cioè ptr, e inizializzandola con l'indirizzo della variabile i.

Cos'è il riferimento?

Il riferimento è un'altra potente funzionalità del linguaggio C++. Consideriamo il seguente frammento di codice:

inta= 200;
int &R=a;

In questo esempio, abbiamo dichiarato un intero, ovvero a e quindi dichiarato una variabile di riferimento r, che viene inizializzata con il valore di a. Quindi, la variabile di riferimento non è altro che un alias di un'altra variabile.

Metodi di passaggio dei parametri:

Esistono tre tipi di metodi di passaggio dei parametri nel linguaggio C++:

  1. Chiama per valore / Passa per valore
  2. Chiama per indirizzo / Passa per indirizzo
  3. Chiama per riferimento / Passa per riferimento

In questo articolo, discutiamo di – Chiamata per indirizzo e Chiamata per riferimento.

Che cos'è Chiama per indirizzo / Passa per indirizzo?

Nel caso del metodo Call by address / Pass by address, gli argomenti della funzione vengono passati come indirizzo. La funzione chiamante passa l'indirizzo dei parametri. Le variabili puntatore vengono utilizzate nella definizione della funzione. Con l'aiuto del metodo Call by address, la funzione può accedere ai parametri attuali e modificarli. Vedremo un esempio del metodo Call by address nella sezione successiva di questo articolo.

Che cos'è Chiama per riferimento/Passa per riferimento?

Nel metodo Chiama per riferimento/Passa per riferimento, i parametri della funzione vengono passati come riferimento. All'interno della definizione della funzione, si accede ai parametri effettivi utilizzando la variabile di riferimento.

Esempi:

Ora, poiché comprendiamo il concetto di metodi di passaggio dei parametri, vedremo diversi programmi di esempio per comprendere il meccanismo di passaggio dei parametri in C++:

  1. Esempio-1 – Chiamata per indirizzo (1)
  2. Esempio-2 – Chiamata per indirizzo (2)
  3. Esempio-3 – Chiamata per riferimento (1)
  4. Esempio-4 – Chiamata per riferimento (2)

I primi due esempi vengono forniti per spiegare come funziona il metodo Call by address in C++. Gli ultimi due esempi servono a spiegare il concetto di Call by reference.

Esempio-1 – Chiamata per indirizzo (1)

In questo esempio, dimostreremo il meccanismo di chiamata per indirizzo. Dalla funzione main(), chiamiamo la funzione hello() e passiamo l'indirizzo di var. Nella definizione della funzione, stiamo ricevendo l'indirizzo di var in una variabile puntatore, cioè p. All'interno della funzione ciao, il valore di var viene modificato in 200 con l'aiuto del puntatore. Pertanto, il valore di var viene modificato in 200 all'interno della funzione main() dopo la chiamata della funzione hello().

#includere
usando spazio dei nomiore;

vuotoCiao(int *P)
{
costo <<fine<< 'All'interno della funzione ciao(): ' <<fine;
costo << 'Valore di *p = ' << *P<<fine;
*P= 200;
costo << 'Valore di *p = ' << *P<<fine;
costo << 'Uscire dalla funzione hello().' <<fine;
}

intprincipale()
{
intdove= 100;
costo << 'Valore di var all'interno della funzione main() = ' <<dove<<fine;

Ciao(&dove);

costo <<fine<< 'Valore di var all'interno della funzione main() = ' <<dove<<fine;

Restituzione 0;
}

Esempio-2 – Chiamata per indirizzo (2)

Questo è un altro esempio del metodo di chiamata per indirizzo. In questo esempio, spiegheremo come utilizzare il metodo call by address per risolvere un problema reale. Ad esempio, vogliamo scrivere una funzione per scambiare due variabili. Se usiamo il meccanismo di chiamata per valore per scambiare due variabili, le variabili effettive non vengono scambiate nella funzione chiamante. Il metodo di chiamata per indirizzo può essere utilizzato in uno scenario di questo tipo. In questo esempio, stiamo passando l'indirizzo di var_1 (&var_1) e var_2 (&var_2) alla funzione mySwap(). All'interno della funzione mySwap(), stiamo scambiando i valori di queste due variabili con l'aiuto dei puntatori. Come puoi vedere nell'output seguente, il valore effettivo di queste variabili viene scambiato nella funzione main() dopo l'esecuzione della funzione mySwap().

#includere
usando spazio dei nomiore;

vuotomySwap(int *vptr_1,int *vptr_2)
{
inttemp_var;
temp_var= *vptr_1;
*vptr_1= *vptr_2;
*vptr_2=temp_var;
}

intprincipale()
{
intvar_1= 100;
intvar_2= 300;

costo << 'Prima di chiamare la funzione mySwap(), valore di var_1 : ' <<var_1<<fine;
costo << 'Prima di chiamare la funzione mySwap(), valore di var_2 : ' <<var_2<<fine<<fine;

costo << 'Richiamo della funzione mySwap() - Chiama per indirizzo.' <<fine<<fine;
mySwap(&var_1,&var_2);

costo << 'Dopo aver chiamato la funzione mySwap(), valore di var_1 : ' <<var_1<<fine;
costo << 'Dopo aver chiamato la funzione mySwap(), valore di var_2 : ' <<var_2<<fine;

Restituzione 0;
}

Esempio-3 – Chiamata per riferimento (1)

In questo esempio, dimostreremo come funziona la chiamata per riferimento in C++. Nella definizione della funzione hello(), il valore viene ricevuto come variabile di riferimento (&p). Con l'aiuto della variabile di riferimento (cioè p), siamo in grado di modificare il valore del parametro attuale (var) all'interno della funzione main().

#includere
usando spazio dei nomiore;

vuotoCiao(int &P)
{
costo <<fine<< 'All'interno della funzione ciao(): ' <<fine;
costo << 'Valore di p = ' <<P<<fine;
P= 200;
costo << 'Valore di p = ' <<P<<fine;
costo << 'Uscire dalla funzione hello().' <<fine;
}

intprincipale()
{
intdove= 100;
costo << 'Valore di var all'interno della funzione main() = ' <<dove<<fine;

Ciao(dove);

costo <<fine<< 'Valore di var all'interno della funzione main() = ' <<dove<<fine;

Restituzione 0;
}

Esempio-4 – Chiamata per riferimento(2)

Questo è un altro esempio di chiamata per riferimento. In questo esempio, dimostreremo come funziona la chiamata per riferimento in C++ con l'aiuto di un esempio del mondo reale. La funzione mySwap() viene chiamata dalla funzione main() con i seguenti parametri – var_1 e var_2. All'interno della funzione mySwap(), stiamo ricevendo i parametri come variabili di riferimento.

#includere
usando spazio dei nomiore;

vuotomySwap(int &vref_1,int &vref_2)
{
inttemp_var;
temp_var=vref_1;
vref_1=vref_2;
vref_2=temp_var;
}

intprincipale()
{
intvar_1= 100;
intvar_2= 300;

costo << 'Prima di chiamare la funzione mySwap(), valore di var_1 : ' <<var_1<<fine;
costo << 'Prima di chiamare la funzione mySwap(), valore di var_2 : ' <<var_2<<fine<<fine;

costo << 'Chiamata funzione mySwap() - Chiama per riferimento.' <<fine<<fine;
mySwap(var_1, var_2);

costo << 'Dopo aver chiamato la funzione mySwap(), valore di var_1 : ' <<var_1<<fine;
costo << 'Dopo aver chiamato la funzione mySwap(), valore di var_2 : ' <<var_2<<fine;

Restituzione 0;
}

Conclusione

Comprensione dei metodi di passaggio dei parametri in C++ è molto cruciale. Il linguaggio di programmazione C supporta solo la chiamata per valore e la chiamata per indirizzo. Tuttavia, il C++ supporta la chiamata per riferimento insieme ai due meccanismi precedenti. In questo articolo abbiamo visto diversi esempi funzionanti per comprendere il concetto di Chiamata per indirizzo e Chiamata per riferimento. La chiamata per indirizzo è un metodo molto potente e popolare nelle applicazioni di dominio incorporato.